使用Message方式传递和处理SOAP消息。
1.1、创建服务
private String wsdlUrlStr = "http://localhost:9999/ns?wsdl";
private String targetNameSpace = "http://service.chb.com/";
URL wsdlUrl = new URL(wsdlUrlStr);
QName qName = new QName(targetNameSpace,
"MyServiceImplService");
Service service = Service.create(wsdlUrl, qName);
1.2、创建Dispatch ,通过Dispatch 发送SOAP消息, 已经获取响应的消息。
1.3、创建SOAPMessage, 并通过QName指定消息中的数据传递。
//3、创建SOAPMessage
SOAPMessage message = MessageFactory.newInstance().createMessage()
SOAPEnvelope envelope = message.getSOAPPart().getEnvelope()
SOAPBody body = envelope.getBody()
//4、创建QName 来指定消息中传递数据
QName eleQName = new QName(targetNameSpace, "add", "q0")
SOAPElement ele = body.addBodyElement(eleQName)
ele.addChildElement("a").setValue("22")
ele.addChildElement("b").setValue("33")
message.writeTo(System.out)
1.4、通过Dispatch 发送Message
SOAPMessage response = dispatch.invoke(message);
response.writeTo(System.out);
1.5、通过Document 获取响应消息中的参数。
//6、获取响应message的参数。
Document doc = response.getSOAPBody().extractContentAsDocument()
String result = doc.getElementsByTagName("addResult").item(0).getTextContent()
System.out.println("\n" + result)
完整代码
public class TestSOAP {
private String wsdlUrlStr = "http://localhost:9999/ns?wsdl";
private String targetNameSpace = "http://service.chb.com/";
@Test
public void test02() {
try {
URL wsdlUrl = new URL(wsdlUrlStr);
QName qName = new QName(targetNameSpace,
"MyServiceImplService");
Service service = Service.create(wsdlUrl, qName);
/**
<service name="MyServiceImplService">
<port name="MyServiceImplPort" binding="tns:MyServiceImplPortBinding">
<soap:address location="http://localhost:9999/ns"/>
</port>
</service>
*/
QName portName = new QName(targetNameSpace, "MyServiceImplPort");
Dispatch<SOAPMessage> dispatch = service.createDispatch(portName,
SOAPMessage.class,
Service.Mode.MESSAGE);
SOAPMessage message = MessageFactory.newInstance().createMessage();
SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
SOAPBody body = envelope.getBody();
QName eleQName = new QName(targetNameSpace, "add", "q0");
SOAPElement ele = body.addBodyElement(eleQName);
ele.addChildElement("a").setValue("22");
ele.addChildElement("b").setValue("33");
message.writeTo(System.out);
System.out.println("\n invoke.....");
SOAPMessage response = dispatch.invoke(message);
response.writeTo(System.out);
Document doc = response.getSOAPBody().extractContentAsDocument();
String result = doc.getElementsByTagName("addResult").item(0).getTextContent();
System.out.println("\n" + result);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (SOAPException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}