使用Message方式传递和处理SOAP消息。
1.1、创建服务
private String wsdlUrlStr = "http://localhost:9999/ns?wsdl";
private String targetNameSpace = "http://service.chb.com/";
//1、创建服务(Service)
//1.1、创建URL ,
URL wsdlUrl = new URL(wsdlUrlStr);
//1.2、创建QName;
QName qName = new QName(targetNameSpace,
"MyServiceImplService"); //发布服务名称
Service service = Service.create(wsdlUrl, qName);
1.2、创建Dispatch ,通过Dispatch 发送SOAP消息, 已经获取响应的消息。
//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);//打印一下请求message
1.4、通过Dispatch 发送Message
//5、通过Dispatch发送消息。
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 {
//1、创建服务(Service)
//1.1、创建URL ,
URL wsdlUrl = new URL(wsdlUrlStr);
//1.2、创建QName;
QName qName = new QName(targetNameSpace,
"MyServiceImplService"); //发布服务名称
Service service = Service.create(wsdlUrl, qName);
/**
*/
//2、创建Dispatch
QName portName = new QName(targetNameSpace, "MyServiceImplPort");
Dispatch dispatch = service.createDispatch(portName,
SOAPMessage.class,
Service.Mode.MESSAGE);//消息传递方式
//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);//打印一下请求message
//5、通过Dispatch发送消息。
System.out.println("\n invoke.....");
SOAPMessage response = dispatch.invoke(message);
response.writeTo(System.out);
//6、获取响应message的参数。
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) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}