检查增值税号网络服务电话

问题描述 投票:0回答:1

我尝试编写一个程序,仅检查增值税号的有效性。我想在这里使用网络服务:https://ec.europa.eu/taxation_customs/vies/services/checkVatService.wsdl 我按照本教程(https://www.baeldung.com/java-soap-web-service)并让 Maven 使用以下 pom.xml 在我的项目中生成一些类:

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ffleuchten.vatchecker</groupId>
<artifactId>VatChecker</artifactId>
<version>0.0.1</version>
<dependencies>
    <dependency>
        <groupId>jakarta.xml.ws</groupId>
        <artifactId>jakarta.xml.ws-api</artifactId>
        <version>4.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>4.0.0</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-ri</artifactId>
        <version>4.0.0</version>
        <type>pom</type>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-maven-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <wsdlUrls>
                    <wsdlUrl>https://ec.europa.eu/taxation_customs/vies/services/checkVatService.wsdl</wsdlUrl>
                </wsdlUrls>
                <keep>true</keep>
                <packageName>com.ffleuchten.vatchecker.generated</packageName>
                <sourceDestDir>src/main/java</sourceDestDir>
            </configuration>
        </plugin>
    </plugins>
</build>

生成的类如下:

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

生成这些类后有点奇怪,因为生成的导入语句是错误的。它生成了无效的导入,例如:

import javax.xml.ws.Service;

我让我的日食变成了

import jakarta.xml.ws.Service;

进口。

之后一切都编译得很好,我做了这个课程来尝试一下:

package com.ffleuchten.vatchecker;

import java.time.LocalDate;

import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

import com.ffleuchten.vatchecker.generated.CheckVatPortType;
import com.ffleuchten.vatchecker.generated.CheckVatService;

import jakarta.xml.ws.Holder;

public class TestVAT {

    private String countryCode;
    private String vatNumber;

    public TestVAT(String countryCode, String vatNumber) {
        this.countryCode = countryCode;
        this.vatNumber = vatNumber;
    }

    private void run() {
        try {
            System.out.println("checking VAT number "
                    .concat(this.vatNumber)
                    .concat(" with country code ")
                    .concat(this.countryCode)
                    .concat("..."));
            
            CheckVatService service = new CheckVatService();
            CheckVatPortType port = service.getCheckVatPort();
            
            Holder<String> countryCodeHolder = new Holder<String>(this.countryCode); 
            Holder<String> vatNumberHolder = new Holder<String>(this.vatNumber);  
            Holder<XMLGregorianCalendar> requestDateHolder = new Holder<XMLGregorianCalendar>(DatatypeFactory.newInstance().newXMLGregorianCalendar(LocalDate.now().toString()));
            Holder<Boolean> validHolder = new Holder<Boolean>(false); 
            Holder<String> nameHolder = new Holder<String>("?"); 
            Holder<String> adressHolder = new Holder<String>("?");
            
            port.checkVat(countryCodeHolder, vatNumberHolder, requestDateHolder, validHolder, nameHolder, adressHolder);
            
            System.out.println("VAT number "
                    .concat(vatNumberHolder.value)
                    .concat(" with country code ")
                    .concat(countryCodeHolder.value)
                    .concat(" is ")
                    .concat(validHolder.value.booleanValue() ? "valid" : "invalid")
                    .concat(" and belongs to ")
                    .concat(nameHolder.value)
                    .concat(" who lives at ")
                    .concat(adressHolder.value)
                    .concat("!"));
            
            System.out.println("VAT number checked! exiting now...");
            System.exit(0);
            
        } catch (DatatypeConfigurationException e) {
            e.printStackTrace();
            System.exit(1);
        }
        
    }
    
    public static void main(String[] args) {
        if(args.length < 1) {
            System.err.println("no country code passed as parameter!");
            System.exit(1);
        }
        if(args.length < 2) {
            System.err.println("no VAT number passed as parameter!");
            System.exit(1);
        }
        String countryCode = args[0];
        String vatNumber = args[1];
        new TestVAT(countryCode, vatNumber).run();
    }

}

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

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

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

java web-services
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.