客户端调用1:
package client; import java.io.InputStream; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPMessage; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.ws.Dispatch; import javax.xml.ws.Service; public class MyDOMSourceMessageProviderClient { public MyDOMSourceMessageProviderClient() {} public static void main(String[] args)throws Exception { MessageFactory factory = MessageFactory.newInstance(); URL wsdlURL = new URL("http://localhost:8085/cxf-despatch-provider-test/service/domMessageProvider?wsdl"); QName serviceName = new QName("http://server/", "MyDOMSourceMessageProviderService"); QName portName = new QName("http://server/","MyDOMSourceMessageProviderPort"); Service service = Service.create(wsdlURL, serviceName); InputStream input= MyDOMSourceMessageProviderClient.class.getResourceAsStream("../GreetMeDocLiteralReq2.xml"); SOAPMessage message = factory.createMessage(null, input); DOMSource dom = new DOMSource(message.getSOAPPart()); Dispatch<DOMSource> dispatch = service.createDispatch(portName,DOMSource.class,Service.Mode.MESSAGE); DOMSource domRsp = dispatch.invoke(dom); Transformer transformer = TransformerFactory.newInstance().newTransformer(); StreamResult streamResult = new StreamResult(System.out); transformer.transform(domRsp, streamResult); System.out.println("/n"); System.out.println(domRsp.getNode().getLastChild().getTextContent().trim()+"~~~~~~~~~~~domSourceMessage"); } }
服务端执行1:
package server; import java.io.InputStream; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPMessage; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.ws.Provider; import javax.xml.ws.Service; import javax.xml.ws.ServiceMode; import javax.xml.ws.WebServiceProvider; @WebServiceProvider() @ServiceMode(value=Service.Mode.MESSAGE) public class MyDOMSourceMessageProvider implements Provider<DOMSource> { @Override public DOMSource invoke(DOMSource request) { DOMSource response = new DOMSource(); try { Transformer transformer = TransformerFactory.newInstance().newTransformer(); StreamResult streamResult = new StreamResult(System.out); transformer.transform(request, streamResult); System.out.println("/n"); System.out.println("----------------------request domSourceMessage---------------------"); MessageFactory mf = MessageFactory.newInstance(); InputStream inputRsp = getClass().getResourceAsStream("../GreetMeDocLiteralResp2.xml"); SOAPMessage messageRsp = mf.createMessage(null, inputRsp); inputRsp.close(); response.setNode(messageRsp.getSOAPPart()); } catch (Exception e) { e.printStackTrace(); } return response; } }
客户端调用2:
package client; import java.io.InputStream; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPMessage; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.ws.Dispatch; import javax.xml.ws.Service; public class MyDOMSourcePayLoadProviderClient { public MyDOMSourcePayLoadProviderClient() {} public static void main(String[] args)throws Exception { MessageFactory factory = MessageFactory.newInstance(); URL wsdlURL = new URL("http://localhost:8085/cxf-despatch-provider-test/service/domPayLoadProvider?wsdl"); QName serviceName = new QName("http://server/", "MyDOMSourcePayLoadProviderService"); QName portName = new QName("http://server/","MyDOMSourcePayLoadProviderPort"); Service service = Service.create(wsdlURL, serviceName); InputStream input= MyDOMSourcePayLoadProviderClient.class.getResourceAsStream("../GreetMeDocLiteralReq2.xml"); SOAPMessage message = factory.createMessage(null, input); DOMSource dom = new DOMSource(message.getSOAPBody().extractContentAsDocument()); Dispatch<DOMSource> dispatch = service.createDispatch(portName,DOMSource.class,Service.Mode.PAYLOAD); DOMSource domRsp = dispatch.invoke(dom); Transformer transformer = TransformerFactory.newInstance().newTransformer(); StreamResult streamResult = new StreamResult(System.out); transformer.transform(domRsp, streamResult); System.out.println("/n"); System.out.println(domRsp.getNode().getLastChild().getTextContent().trim()+"~~~~~~~~~~~domSourcePayLoad"); } }
服务端执行2:
package server; import java.io.InputStream; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPMessage; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.ws.Provider; import javax.xml.ws.Service; import javax.xml.ws.ServiceMode; import javax.xml.ws.WebServiceProvider; @WebServiceProvider @ServiceMode(value=Service.Mode.PAYLOAD) public class MyDOMSourcePayLoadProvider implements Provider<DOMSource> { @Override public DOMSource invoke(DOMSource request) { DOMSource response = new DOMSource(); try { Transformer transformer = TransformerFactory.newInstance().newTransformer(); StreamResult streamResult = new StreamResult(System.out); transformer.transform(request, streamResult); System.out.println("/n"); System.out.println("----------------------request domSourcePayLoad---------------------"); InputStream input = getClass().getResourceAsStream("../GreetMeDocLiteralResp2.xml"); SOAPMessage message = MessageFactory.newInstance().createMessage(null, input); input.close(); response.setNode(message.getSOAPBody().extractContentAsDocument()); } catch (Exception e) { e.printStackTrace(); } return response; } }
客户端调用3:
package client; import java.io.InputStream; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPMessage; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.ws.Dispatch; import javax.xml.ws.Service; public class MySOAPMessageProviderTest { public static void main(String[] args) throws Exception{ MessageFactory factory = MessageFactory.newInstance(); URL wsdlURL = new URL("http://localhost:8085/cxf-despatch-provider-test/service/soapMessageProvider?wsdl"); QName serviceName = new QName("http://server/", "MySOAPMessageProviderService"); QName portName = new QName("http://server/","MySOAPMessageProviderPort"); Service service = Service.create(wsdlURL, serviceName); InputStream input= MySOAPMessageProviderTest.class.getResourceAsStream("../GreetMeDocLiteralReq2.xml"); SOAPMessage message = factory.createMessage(null, input); Dispatch<SOAPMessage> dispatch = service.createDispatch(portName,SOAPMessage.class,Service.Mode.MESSAGE); SOAPMessage messageRsp = dispatch.invoke(message); Transformer transformer = TransformerFactory.newInstance().newTransformer(); StreamResult streamResult = new StreamResult(System.out); transformer.transform(messageRsp.getSOAPPart().getContent(), streamResult); System.out.println("/n"); System.out.println(messageRsp.getSOAPBody().getTextContent().trim()+"~~~~~~~~~~~soapmessage"); } }
服务端执行3:
package server; import java.io.InputStream; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPMessage; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.ws.Provider; import javax.xml.ws.Service; import javax.xml.ws.ServiceMode; import javax.xml.ws.WebServiceProvider; @WebServiceProvider @ServiceMode(value=Service.Mode.MESSAGE) public class MySOAPMessageProvider implements Provider<SOAPMessage> { @Override public SOAPMessage invoke(SOAPMessage request) { SOAPMessage response = null; try { Transformer transformer = TransformerFactory.newInstance().newTransformer(); StreamResult streamResult = new StreamResult(System.out); transformer.transform(request.getSOAPPart().getContent(), streamResult); System.out.println("/n"); System.out.println("----------------------request soapMessage---------------------"); InputStream input = getClass().getResourceAsStream("../GreetMeDocLiteralResp2.xml"); response = MessageFactory.newInstance().createMessage(null, input); input.close(); } catch (Exception e) { e.printStackTrace(); } return response; } }
客户端调用4:
package client; import java.io.InputStream; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPMessage; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.ws.Dispatch; import javax.xml.ws.Service; import org.w3c.dom.Document; public class MyXMLBodyProviderTest { public static void main(String[] args) throws Exception{ MessageFactory factory = MessageFactory.newInstance(); URL wsdlURL = new URL("http://localhost:8085/cxf-despatch-provider-test/service/xmlBody?wsdl"); QName serviceName = new QName("http://server/", "MyXMLBodyProviderService"); QName portName = new QName("http://server/","MyXMLBodyProviderPort"); Service service = Service.create(wsdlURL, serviceName); InputStream input= MyXMLBodyProviderTest.class.getResourceAsStream("../documentTest.xml"); SOAPMessage message = factory.createMessage(); Document docSrc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(input); message.getSOAPBody().addDocument(docSrc); Dispatch<SOAPMessage> dispatch = service.createDispatch(portName,SOAPMessage.class,Service.Mode.MESSAGE); SOAPMessage messageRsp = dispatch.invoke(message); Transformer transformer = TransformerFactory.newInstance().newTransformer(); StreamResult streamResult = new StreamResult(System.out); transformer.transform(messageRsp.getSOAPPart().getContent(), streamResult); System.out.println("/n-------------------------------------------------------------------------"); } }
服务端执行4:
package server; import java.io.InputStream; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPMessage; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.ws.Provider; import javax.xml.ws.Service; import javax.xml.ws.ServiceMode; import javax.xml.ws.WebServiceProvider; import org.w3c.dom.Document; @WebServiceProvider @ServiceMode(value=Service.Mode.MESSAGE) public class MyXMLBodyProvider implements Provider<SOAPMessage> { @Override public SOAPMessage invoke(SOAPMessage request) { SOAPMessage response = null; try { Transformer transformer = TransformerFactory.newInstance().newTransformer(); StreamResult streamResult = new StreamResult(System.out); transformer.transform(request.getSOAPPart().getContent(), streamResult); System.out.println("/n"); System.out.println("----------------------request soapMessage xml1---------------------"); InputStream input = getClass().getResourceAsStream("../documentTestRsp.xml"); MessageFactory factory = MessageFactory.newInstance(); response = factory.createMessage(); Document docSrc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(input); response.getSOAPBody().addDocument(docSrc); input.close(); } catch (Exception e) { e.printStackTrace(); } return response; } }
服务端配置文件:
<?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 id="domMessageProvider" class="server.MyDOMSourceMessageProvider" /> <jaxws:endpoint id="domMessage" implementor="#domMessageProvider" address="/domMessageProvider"/> <bean id="domPayLoadProvider" class="server.MyDOMSourcePayLoadProvider" /> <jaxws:endpoint id="domPayLoad" implementor="#domPayLoadProvider" address="/domPayLoadProvider"/> <bean id="soapMessageProvider" class="server.MySOAPMessageProvider" /> <jaxws:endpoint id="soapMessage" implementor="#soapMessageProvider" address="/soapMessageProvider"/> <bean id="xmlBody" class="server.MyXMLBodyProvider" /> <jaxws:endpoint id="xmlBodyBean" implementor="#xmlBody" address="/xmlBody"/> </beans>
xml数据1--documentTest.xml:
<?xml version="1.0" encoding="UTF-8"?> <fhd> <f>fu</f> <h>hai</h> <d>dong</d> </fhd>
xml数据2--documentTestRsp.xml:
<?xml version="1.0" encoding="UTF-8"?> <fhd> <f>fu1111111111</f> <h>hai333333333</h> <d>dong55555555</d> </fhd>
xml数据3--GreetMeDocLiteralReq2.xml:
<?xml version="1.0" encoding="utf-8" ?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Body> <ns4:greetMe xmlns:ns4="http://apache.org/hello_world_soap_http/types"> <ns4:requestType>Scott</ns4:requestType> </ns4:greetMe> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
xml数据4--GreetMeDocLiteralResp2.xml:
<?xml version="1.0" encoding="utf-8" ?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Body> <ns4:greetMeResponse xmlns:ns4="http://apache.org/hello_world_soap_http/types"> <ns4:responseType>5555555555555555555</ns4:responseType> </ns4:greetMeResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>