java 接收soap_(六)发送、接收SOAP消息(1)

packagetest;importjava.net.URL;importjava.rmi.RemoteException;importjavax.xml.namespace.QName;importjavax.xml.soap.MessageFactory;importjavax.xml.soap.SOAPBody;importjavax.xml.soap.SOAPBodyElement;importjavax.xml.soap.SOAPEnvelope;importjavax.xml.soap.SOAPHeader;importjavax.xml.soap.SOAPMessage;importjavax.xml.soap.SOAPPart;importjavax.xml.ws.Dispatch;importjavax.xml.ws.Service;importorg.w3c.dom.Node;public classTestMain {public static void main(String[] args) throwsRemoteException {/*** 发送soap消息

**/

try{//创建一个message工厂

MessageFactory factory =MessageFactory.newInstance();//获取soapMessage对象

SOAPMessage send_message =factory.createMessage();

SOAPPart soapPart=send_message.getSOAPPart();/*** 获取head和body对象*/SOAPEnvelope soapEnvelope=soapPart.getEnvelope();

SOAPBody soapBody=soapEnvelope.getBody();

SOAPHeader soapHeader=soapEnvelope.getHeader();/*** 把数据封装到body元素里*/

//添加add标签

QName addName=new QName("http://service/", "add","ns");

SOAPBodyElement soapBodyElement=soapBody.addBodyElement(addName);//添加add标签中的子标签

soapBodyElement.addChildElement(new QName("x")).setValue("1");;

soapBodyElement.addChildElement(new QName("y")).setValue("10");;//打印发送到服务端的soap消息

send_message.writeTo(System.out);/** 将消息发送到服务端*/URL wsdlDocumentLocation=new URL("http://localhost:3030/first?wsdl");

QName serviceName=new QName("http://service/", "IFirstServiceImplService");

Service service=Service.create(wsdlDocumentLocation, serviceName);/*** createDispatch方法第一个参数的Qname的构造方法的参数为port标签的name值

* Mode

* Service.Mode.MESSAGE:发送是XML的Doucment对象

* Service.Mode.PAYLOAD:发送的是XML的字符串*/QName portName=new QName("http://service/","IFirstServiceImplPort");

Dispatch dispatch=service.createDispatch(portName,SOAPMessage.class,Service.Mode.MESSAGE);//发送soap消息,并接收服务端返回的soap消息

SOAPMessage respon_message=dispatch.invoke(send_message);

System.out.println("服务端返回soap消息");

respon_message.writeTo(System.out);/*** 解析从服务端返回的soap消息*/SOAPPart part=respon_message.getSOAPPart();

SOAPEnvelope envelope=part.getEnvelope();

SOAPBody body=envelope.getBody();

Node node=body.getElementsByTagName("addResult").item(0);

System.out.println();

System.out.println("result=="+node.getTextContent());

}catch(Exception e) {

e.printStackTrace();

}

}

}


版权声明:本文为weixin_31328141原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。