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"...)
我正在尝试为我的 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"...)