首页 > 解决方案 > javax.xml.ws.WebServiceException:未定义的端口类型:

问题描述

我正在尝试为我的 WSDL 服务创建一个客户端。当我尝试使用/使用该服务时,我收到此错误:

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 中使用 register 方法时:

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)

标签: javamavensoapwsdl

解决方案


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

您需要提供端口名称

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

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


推荐阅读