Webservice中服务器端直接操作SOAP的XML内容
来源:互联网 发布:创信网络 编辑:程序博客网 时间:2024/05/14 23:03
通常情况下,在JAX-WS2.0中是利用JAXB将传入的SOAP XML消息转换成JAVA的object,然后调用对应porttype的JAVA类的相应的方法,在完成调用后,再通过JAXB将返回参数转成SOAP XML.
JAX-WS还提供了另一种方法,让我们可以直接操作SOAP XML,通过让对应porttype的JAVA类实现 Provider<Source>接口,当服务器端收到SOAP消息后,会调用 Source invoke(Source payload) 方法,如果需要直接对XML进行操作,不想利用JAXB来做对象和XML的转换,可以用这种机制.
例子:(用CXF发布web service)参照http://blog.csdn.net/kkdelta/archive/2009/03/12/3984312.aspx了解CXF发布的步骤.
1,JAVA 类
package com.cxfwsp.test;
import java.io.StringReader;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import javax.xml.ws.Provider;
import javax.xml.ws.Service;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceProvider;
@WebServiceProvider(serviceName = "TestWSProviderService", portName = "TestWSProviderPort", targetNamespace = "http://test.cxfwsp.com/", wsdlLocation = "wsdl/prjCXFWSP.wsdl")
@ServiceMode(Service.Mode.PAYLOAD)
public class TestWSProvider implements Provider<Source> {
public Source invoke(Source payload) {
//System.out.println(payload);
//DOMSource domsrc = (DOMSource)payload;
try{
Transformer tFormer = TransformerFactory.newInstance().newTransformer();
Result result = new StreamResult(System.out);
tFormer.transform(payload, result);
}catch(Exception e){
e.printStackTrace();
}
return new StreamSource(new StringReader("<testWSResponse><return><retIntVal>12</retIntVal><retStrVAL>teststr</retStrVAL> </return></testWSResponse>"));
}
}
2,wsdl 文件:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="TestWSProviderService" targetNamespace="http://test.cxfwsp.com/" xmlns:tns="http://test.cxfwsp.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://test.cxfwsp.com/" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://test.cxfwsp.com/">
<xs:element name="testWS" type="tns:testWS"/>
<xs:element name="testWSResponse" type="tns:testWSResponse"/>
<xs:complexType name="testWS">
<xs:sequence>
<xs:element minOccurs="0" name="arg0" type="tns:reqParameter"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="reqParameter">
<xs:sequence>
<xs:element name="intVal" type="xs:int"/>
<xs:element minOccurs="0" name="strVAL" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="testWSResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="tns:respParameter"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="respParameter">
<xs:sequence>
<xs:element name="retIntVal" type="xs:int"/>
<xs:element minOccurs="0" name="retStrVAL" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="testWSResponse">
<wsdl:part name="parameters" element="tns:testWSResponse">
</wsdl:part>
</wsdl:message>
<wsdl:message name="testWS">
<wsdl:part name="parameters" element="tns:testWS">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="TestWSProvider">
<wsdl:operation name="testWS">
<wsdl:input name="testWS" message="tns:testWS">
</wsdl:input>
<wsdl:output name="testWSResponse" message="tns:testWSResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="TestWSProviderServiceSoapBinding" type="tns:TestWSProvider">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="testWS">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="testWS">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="testWSResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="TestWSProviderService">
<wsdl:port name="TestWSProviderPort" binding="tns:TestWSProviderServiceSoapBinding">
<soap:address location="http://localhost:8080/prjCXFWSP/services/TestWSProviderPort"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
3 web.xml配置(集成Spring发布):
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/beans.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>
org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
4,Spring 配置文件(beans.xml):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<bean name="testService" class="com.cxfwsp.test.TestWSProvider" />
<jaxws:endpoint id="testEndpoint" implementor="#testService"
wsdlLocation="classpath:wsdl/prjCXFWSP.wsdl"
address="/TestWSProviderPort">
<jaxws:features>
<bean class="org.apache.cxf.feature.LoggingFeature" />
</jaxws:features>
</jaxws:endpoint>
</beans>
- Webservice中服务器端直接操作SOAP的XML内容
- 通过SOAP获取webSERVICE内容
- PHP WebService得到通讯的SOAP包内容
- Android 直接写和读XML串方式 调用 WebService soap
- 通过webservice提交xml数据以及soap协议的使用
- HttpURLConnection 直接发送soap消息调用webservice
- HttpURLConnection 直接发送soap消息调用webservice
- HttpURLConnection 直接发送soap消息调用webservice
- HttpURLConnection 直接发送soap消息调用webservice
- JAVA采用CXF框架开发基于JAX-WS(SOAP)规范的WebService服务器端
- webservice接口soap请求报文的xml字段顺序必须与wsdl中定义的顺序一致才能解析正确
- 如何 操作在内存中 xml 格式的内容
- webservice中wsdl和soap
- 利用JavaScript SOAP Client直接调用webService --完整的前后台配置与调用示例
- 利用JavaScript SOAP Client直接调用webService --完整的前后台配置与调用示例
- 【soap】利用php的soap实现webservice
- 实现Webservice 中Soap Header 的用户验证
- 在SOAP Header中携带认证ID的WebService实例
- lenny下Cacti连续监控Nginx运行状态
- 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast(转载
- 【转】Linux下的DNS安全保障十大技巧
- Hibernate中Criteria的完整用法
- GetLastError返回值的意义
- Webservice中服务器端直接操作SOAP的XML内容
- mschart 控件在另外一台机器上无法显示
- 如何在我的博客中快速查找你想要的东东
- javascript
- RegisterHiddenField/RegisterOnSubmitStatement
- 今天在用c语言写一个栈,碰到不少问题,感觉到自己基础还是蛮差劲的,现在拿出来分享分享
- 工具软件
- ubuntu9.10 软件配置
- 在GWT中使用chart