javax.xml.ws.WebServiceException:未定义的端口类型:

javax.xml.ws.WebServiceException: Undefined port type:

我正在尝试为我的 WSDL 服务创建一个客户端。当我尝试 consume/use 服务时,出现此错误:

Exception in thread "main" javax.xml.ws.WebServiceException: Undefined port type:

我正在通过 JAXWS 生成我的 WSDL 绑定。唯一可能未定义的端口类型是寄存器函数的 String[][] 输入(最初我使用 ArrayLists 但是,JAXWS 无法正确解析它们,所以我将它们更改为数组)。

<message name="register">
<part xmlns:ns1="http://jaxb.dev.java.net/array" name="endUserDetailsInput" type="ns1:stringArrayArray"/>
</message>

所以当我尝试在 CLI 中使用注册方法时:

Controller controller = new Controller();
//Hardcoded Student/AcademicStaff here.
String[] rec1 = {"0","Student"};
String[] rec2 = {"1","Student"};
String[] rec3 = {"2","Student"};
String[] rec4 = {"3","Student"};
String[] rec5 = {"4","Student"};
String[] rec6 = {"5","AcademicStaff"};
String[] rec7 = {"6","AcademicStaff"};
String[][] endUserList = {rec1,rec2,rec3,rec4,rec5,rec6,rec7};
controller.batchReg(endUserList);

在控制器中:

public class Controller {
    public void batchReg(String[][] records){
        URL url = null;
        try {
            url = new URL("http://localhost:8080/EndUserService/?wsdl");
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        if (url == null) {
            System.out.println("Failed");
        }
        QName qname = new QName("http://EndUserService/","EndUserServiceImplService");
        Service service = Service.create(url,qname);
        EndUserService obj = service.getPort(EndUserService.class);
        obj.register(records);
        System.out.println("Complete!");
    }
}

我收到错误。如果需要,我可以提供完整的 WSDL 文件和其他文件,但我认为它必须是那部分,因为系统中的其他输入和输出都是原始类型。

如果我不能使用 ArrayLists 或 Arrays of Arrays,您能否建议一种可行的替代数据类型,或解决方法?我可以手动注册每个最终用户,但这本身就是一项任务,我想尽可能避免它。

感谢任何帮助。

打印出完整错误

Exception in thread "main" javax.xml.ws.WebServiceException: Undefined port type: {http://controller/}EndUserService
    at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:406)
    at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:412)
    at javax.xml.ws.Service.getPort(Service.java:188)
    at controller.Controller.batchReg(Controller.java:28)
    at view.CLI.main(CLI.java:21)

您的网络服务注释似乎没有端点接口。

您需要提供端口名称

EndUserService obj = service.getPort(qname,EndUserService.class);

或者在你的@WebService注解中包含一个endpointInterface @WebService(endpointInterface="com.something"...)