原文地址:spring boot + cfx实现webservice功能
扩展阅读:No operation was found with the name解决方法总结
调用方法如下:
private static void printUserList() {
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
// 这里填自己的接口地址
Client client = dcf.createClient("http://210.85.293.34:6666/Service/WebService.asmx?wsdl");
// 需要密码的情况需要加上用户名和密码
// client.getOutInterceptors().add(new ClientLoginInterceptor("gxhsg2016", "Eyjp4Z1s"));
Object[] objects = new Object[0];
try {
// invoke("方法名",参数1,参数2,参数3....);
objects = client.invoke("FindPeople", "gxhsg2016",1);
if (objects.length > 0) {
System.out.println("方法调用成功,详情如下:");
ArrayList<Object> objectList = (ArrayList) objects[0];
for (Object o : objectList) {
JSONObject jsonObject = JSONObject.fromObject(o);
System.out.println(jsonObject);
}
}
} catch (java.lang.Exception e) {
e.printStackTrace();
}
}
这里的代码仅是应急所用,下面贴一下自己看了半天的文档之后的解析:
<wsdl:definitios xmlns:...>
<wsdl:types>
<xs:schema xmlns:...>
<xs:element name="FindPeople">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string"/>
<xs:element name="age" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="FindPeopleResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="FindPeopleResult" type="tns:People"/>
</xs:sequence>
</xs:complexType>
</xs:element>
...
<!--
一般来说在标签<xs:scheme>内存成对存在<xs:element name="method">和<xs:element name="methodResponse">
前者表示接口的的方法,其中的子子标签中的<xs:element>则表示这个方法的参数列表,调用时各个参数的顺序
和类型必须和文档中一一对应。后者据说是前者的返回值,
在一个<xs:schema>标签中可能会使用<xs:element>表示多对这样的方法与返回值标签,
另外<xs:schema>还有一个子标签<xs:complexType name="POJO1">,这个标签的意思为复杂类型,可理解为复杂实体类,
如果仔细观察的话可发现上方的某个<xs:element name="methodXXResponse">中的返回值就是这些复杂实体类
-->
<xs:complexType name="People">...</xs:complexType>
...
</xs:schema>
</wsdl:types>
<!-- 下面的就不知道干吗的了 -->
<wsdl:message>
</wsdl:message>
<wsdl:portType>
</wsdl:portType>
<wsdl:binding>
</wsdl:binding>
<wsdl:service>
</wsdl:service>
</wsdl:definitios>
亦或者可以通过idea/eciplise插件在本地生成代码,直接在本地调用。
链接地址:idea通过wsdl文件自动生成webservice客户端java代码