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();
}
}
}