[英]Spring SOAP Ws client
我正在努力打电话,例如,目的是用SpringWS公开肥皂:
这是我在tomcat上部署的wsdl。
<!--Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.3-b01-.-->
<!--Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.3-b01-.-->
<definitions targetNamespace="http://ws.mkyong.com/" name="HelloWorldWSService" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ws.mkyong.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<xsd:schema>
<xsd:import namespace="http://ws.mkyong.com/" schemaLocation="http://localhost:8080/web_services/hello?xsd=1"/>
</xsd:schema>
</types>
<message name="findById">
<part name="parameters" element="tns:findById"/>
</message>
<message name="findByIdResponse">
<part name="parameters" element="tns:findByIdResponse"/>
</message>
<message name="saveJob">
<part name="parameters" element="tns:saveJob"/>
</message>
<message name="saveJobResponse">
<part name="parameters" element="tns:saveJobResponse"/>
</message>
<message name="findJobByName">
<part name="parameters" element="tns:findJobByName"/>
</message>
<message name="findJobByNameResponse">
<part name="parameters" element="tns:findJobByNameResponse"/>
</message>
<message name="findJobByRole">
<part name="parameters" element="tns:findJobByRole"/>
</message>
<message name="findJobByRoleResponse">
<part name="parameters" element="tns:findJobByRoleResponse"/>
</message>
<message name="deleteJob">
<part name="parameters" element="tns:deleteJob"/>
</message>
<message name="deleteJobResponse">
<part name="parameters" element="tns:deleteJobResponse"/>
</message>
<message name="getAllJobs">
<part name="parameters" element="tns:getAllJobs"/>
</message>
<message name="getAllJobsResponse">
<part name="parameters" element="tns:getAllJobsResponse"/>
</message>
<message name="updateJob">
<part name="parameters" element="tns:updateJob"/>
</message>
<message name="updateJobResponse">
<part name="parameters" element="tns:updateJobResponse"/>
</message>
<portType name="HelloWorldWS">
<operation name="findById">
<input wsam:Action="http://ws.mkyong.com/HelloWorldWS/findByIdRequest" message="tns:findById"/>
<output wsam:Action="http://ws.mkyong.com/HelloWorldWS/findByIdResponse" message="tns:findByIdResponse"/>
</operation>
<operation name="saveJob">
<input wsam:Action="http://ws.mkyong.com/HelloWorldWS/saveJobRequest" message="tns:saveJob"/>
<output wsam:Action="http://ws.mkyong.com/HelloWorldWS/saveJobResponse" message="tns:saveJobResponse"/>
</operation>
<operation name="findJobByName">
<input wsam:Action="http://ws.mkyong.com/HelloWorldWS/findJobByNameRequest" message="tns:findJobByName"/>
<output wsam:Action="http://ws.mkyong.com/HelloWorldWS/findJobByNameResponse" message="tns:findJobByNameResponse"/>
</operation>
<operation name="findJobByRole">
<input wsam:Action="http://ws.mkyong.com/HelloWorldWS/findJobByRoleRequest" message="tns:findJobByRole"/>
<output wsam:Action="http://ws.mkyong.com/HelloWorldWS/findJobByRoleResponse" message="tns:findJobByRoleResponse"/>
</operation>
<operation name="deleteJob">
<input wsam:Action="http://ws.mkyong.com/HelloWorldWS/deleteJobRequest" message="tns:deleteJob"/>
<output wsam:Action="http://ws.mkyong.com/HelloWorldWS/deleteJobResponse" message="tns:deleteJobResponse"/>
</operation>
<operation name="getAllJobs">
<input wsam:Action="http://ws.mkyong.com/HelloWorldWS/getAllJobsRequest" message="tns:getAllJobs"/>
<output wsam:Action="http://ws.mkyong.com/HelloWorldWS/getAllJobsResponse" message="tns:getAllJobsResponse"/>
</operation>
<operation name="updateJob">
<input wsam:Action="http://ws.mkyong.com/HelloWorldWS/updateJobRequest" message="tns:updateJob"/>
<output wsam:Action="http://ws.mkyong.com/HelloWorldWS/updateJobResponse" message="tns:updateJobResponse"/>
</operation>
</portType>
<binding name="HelloWorldWSPortBinding" type="tns:HelloWorldWS">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="findById">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="saveJob">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="findJobByName">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="findJobByRole">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="deleteJob">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="getAllJobs">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="updateJob">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="HelloWorldWSService">
<port name="HelloWorldWSPort" binding="tns:HelloWorldWSPortBinding">
<soap:address location="http://localhost:8080/web_services/hello"/>
</port>
</service>
</definitions>
我想定义一个简单的客户端来测试它,使用main方法会很棒,用SpringWS调用它们,如果您给我一些建议或链接,那会很棒,也许是一个有关如何调用它们的示例,例如如果WS方法没有参数,则请求参数并发送一个空的输入请求。
对链接或代码段的任何引用都将提供很大的帮助,我发现了很多不同的示例,没有一个适合我的需求,并且我现在有点困惑。
我建议使用Spring WebServiceTemplate
WebServiceTemplate-WebServiceTemplate是Spring-WS中客户端Web服务访问的核心类。 它包含用于发送Source对象和接收响应消息的方法,可以是Source或Result。 此外,它可以在通过传输将对象编组为XML之前将其编组,然后将任何响应XML重新编组为对象。
第1步:
示例示例使用WSDL生成对象:
1. Copy you are WSDL file into local directory
2. Open Command Promote
3. wsimport -p mypackage -keep -verbose myservice.wsdl
This command generated object request and response
步骤2:Soap Message Factory的ApplicationContext.xml配置
<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">
<property name="soapVersion">
<util:constant static-field="org.springframework.ws.soap.SoapVersion.SOAP_12" />
</property>
</bean>
步骤3:Marshaller配置
<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPaths" value="package"/>
</bean>
步骤4:WebServiceTemplate配置
<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
<constructor-arg ref="messageFactory" />
<property name="marshaller" ref="marshaller"></property>
<property name="unmarshaller" ref="marshaller"></property>
<property name="defaultUri" value="wsdlLocation" />
</bean>
步骤5:
准备连接客户端:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ws.client.core.WebServiceTemplate;
class ClientConnection {
@Autowired
private WebServiceTemplate webServiceTemplate;
public synchronized Object sendRequestAndReceive(Object xmlRequest,
final String uri) {
webServiceTemplate.setDefaultUri(uri);
Object object = webServiceTemplate.marshalSendAndReceive(xmlRequest);
return object;
}
}
请参考下面的链接,以获取更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.