java - 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)
解决方案
似乎您的网络服务注释没有端点接口。
您需要提供端口名称
EndUserService obj = service.getPort(qname,EndUserService.class);
或者在 @WebService 注释中包含一个 endpointInterface
@WebService(endpointInterface="com.something"...)
推荐阅读
- excel - 如何找到最大数据的行数并设置为0
- apache-kafka - 对同一个kafka主题产生一批事件相互覆盖
- php - PHP - 如何获取受保护的属性
- javascript - 如何从数组中打印数字?
- java - Spring 我可以使用 multipart/form-data 发布参数数组吗
- python - 与python中的else块混淆
- postgresql - 如何在 postgres 脚本中声明变量?
- sql - 如何在postgreSQL函数中从字符串变量中修剪双引号
- java - 如何在 for 循环中为 MenuItem 设置文本?
- c# - 我需要关于这个 lerping 问题的帮助。我正在尝试制作平台游戏