Web Services 检查增值税号码网络服务调用

0kjbasz6  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(235)

我试着写一个程序,它只是检查一个增值税号码的有效性。我想在这里使用的web服务:https://ec.europa.eu/taxation_customs/vies/services/checkVatService.wsdl我遵循了这个教程(https://www.baeldung.com/java-soap-web-service),并得到maven生成一些类在我的项目中与以下pom.xml:

  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.ffleuchten.vatchecker</groupId>
  6. <artifactId>VatChecker</artifactId>
  7. <version>0.0.1</version>
  8. <dependencies>
  9. <dependency>
  10. <groupId>jakarta.xml.ws</groupId>
  11. <artifactId>jakarta.xml.ws-api</artifactId>
  12. <version>4.0.0</version>
  13. </dependency>
  14. <dependency>
  15. <groupId>com.sun.xml.ws</groupId>
  16. <artifactId>jaxws-rt</artifactId>
  17. <version>4.0.0</version>
  18. <scope>runtime</scope>
  19. </dependency>
  20. <dependency>
  21. <groupId>com.sun.xml.ws</groupId>
  22. <artifactId>jaxws-ri</artifactId>
  23. <version>4.0.0</version>
  24. <type>pom</type>
  25. </dependency>
  26. </dependencies>
  27. <build>
  28. <plugins>
  29. <plugin>
  30. <groupId>com.sun.xml.ws</groupId>
  31. <artifactId>jaxws-maven-plugin</artifactId>
  32. <version>2.3.2</version>
  33. <configuration>
  34. <wsdlUrls>
  35. <wsdlUrl>https://ec.europa.eu/taxation_customs/vies/services/checkVatService.wsdl</wsdlUrl>
  36. </wsdlUrls>
  37. <keep>true</keep>
  38. <packageName>com.ffleuchten.vatchecker.generated</packageName>
  39. <sourceDestDir>src/main/java</sourceDestDir>
  40. </configuration>
  41. </plugin>
  42. </plugins>
  43. </build>

字符串
生成的类如下:

  1. -rw-r--r-- 1 manoca manoca 2.2K Nov 15 15:15 CheckVat.java
  2. -rw-r--r-- 1 manoca manoca 6.8K Nov 15 15:15 CheckVatApprox.java
  3. -rw-r--r-- 1 manoca manoca 13K Nov 15 15:15 CheckVatApproxResponse.java
  4. -rw-r--r-- 1 manoca manoca 6.4K Nov 15 15:15 CheckVatPortType.java
  5. -rw-r--r-- 1 manoca manoca 5.2K Nov 15 15:15 CheckVatResponse.java
  6. -rw-r--r-- 1 manoca manoca 3.1K Nov 15 15:15 CheckVatService.java
  7. -rw-r--r-- 1 manoca manoca 4.9K Nov 15 15:15 ObjectFactory.java
  8. -rw-r--r-- 1 manoca manoca 221 Nov 15 15:16 package-info.java


生成这些类之后,就有点奇怪了,因为生成的import语句是错误的,生成了无效的导入,比如:

  1. import javax.xml.ws.Service;


我让我的Eclipse改成了

  1. import jakarta.xml.ws.Service;


进口
在那之后,一切都编译得很好,我做了这个类来尝试它:

  1. package com.ffleuchten.vatchecker;
  2. import java.time.LocalDate;
  3. import javax.xml.datatype.DatatypeConfigurationException;
  4. import javax.xml.datatype.DatatypeFactory;
  5. import javax.xml.datatype.XMLGregorianCalendar;
  6. import com.ffleuchten.vatchecker.generated.CheckVatPortType;
  7. import com.ffleuchten.vatchecker.generated.CheckVatService;
  8. import jakarta.xml.ws.Holder;
  9. public class TestVAT {
  10. private String countryCode;
  11. private String vatNumber;
  12. public TestVAT(String countryCode, String vatNumber) {
  13. this.countryCode = countryCode;
  14. this.vatNumber = vatNumber;
  15. }
  16. private void run() {
  17. try {
  18. System.out.println("checking VAT number "
  19. .concat(this.vatNumber)
  20. .concat(" with country code ")
  21. .concat(this.countryCode)
  22. .concat("..."));
  23. CheckVatService service = new CheckVatService();
  24. CheckVatPortType port = service.getCheckVatPort();
  25. Holder<String> countryCodeHolder = new Holder<String>(this.countryCode);
  26. Holder<String> vatNumberHolder = new Holder<String>(this.vatNumber);
  27. Holder<XMLGregorianCalendar> requestDateHolder = new Holder<XMLGregorianCalendar>(DatatypeFactory.newInstance().newXMLGregorianCalendar(LocalDate.now().toString()));
  28. Holder<Boolean> validHolder = new Holder<Boolean>(false);
  29. Holder<String> nameHolder = new Holder<String>("?");
  30. Holder<String> adressHolder = new Holder<String>("?");
  31. port.checkVat(countryCodeHolder, vatNumberHolder, requestDateHolder, validHolder, nameHolder, adressHolder);
  32. System.out.println("VAT number "
  33. .concat(vatNumberHolder.value)
  34. .concat(" with country code ")
  35. .concat(countryCodeHolder.value)
  36. .concat(" is ")
  37. .concat(validHolder.value.booleanValue() ? "valid" : "invalid")
  38. .concat(" and belongs to ")
  39. .concat(nameHolder.value)
  40. .concat(" who lives at ")
  41. .concat(adressHolder.value)
  42. .concat("!"));
  43. System.out.println("VAT number checked! exiting now...");
  44. System.exit(0);
  45. } catch (DatatypeConfigurationException e) {
  46. e.printStackTrace();
  47. System.exit(1);
  48. }
  49. }
  50. public static void main(String[] args) {
  51. if(args.length < 1) {
  52. System.err.println("no country code passed as parameter!");
  53. System.exit(1);
  54. }
  55. if(args.length < 2) {
  56. System.err.println("no VAT number passed as parameter!");
  57. System.exit(1);
  58. }
  59. String countryCode = args[0];
  60. String vatNumber = args[1];
  61. new TestVAT(countryCode, vatNumber).run();
  62. }
  63. }


它仍然可以编译甚至运行,但是无论我使用什么VAT号码和/或国家代码,我总是得到以下输出:

  1. checking VAT number DE814416365 with country code DE...
  2. VAT number DE814416365 with country code DE is invalid and belongs to --- who lives at ---!
  3. VAT number checked! exiting now...


那么,是我在这里做错了什么,还是Web服务真的总是响应“VAT number is invalid”(增值税号码无效)(似乎是这样,因为它用"-“覆盖了名称和地址值)?

9ceoxa92

9ceoxa921#

只要你使用正确的增值税号码(“DE”部分不是增值税号码的一部分),它就能工作!我不知道为什么网络服务不响应错误,而不是给出一个“无效”的信息,但是嘿,它工作了:)

相关问题