Soap消息的处理
首先,复习下,创建一个webservice服务。新建一个java工程 Soap。接口、接口、服务类分别如下:
packagecom.zhutulang.soap;
importjavax.jws.WebParam;
importjavax.jws.WebResult;
importjavax.jws.WebService;
@WebService
public interface MyServiceInter {
@WebResult(name="addResult")
public int add(@WebParam(name="a")int a, @WebParam(name="b")int b);
}
packagecom.zhutulang.soap;
importjavax.jws.WebService;
@WebService(endpointInterface="com.zhutulang.soap.MyServiceInter")
public class MyServiceInterImpl implements MyServiceInter {
@Override
public int add(int a, int b) {
System.out.println("a+b"+(a+b));
return a+b;
}
}
packagecom.zhutulang.soap;
importjavax.xml.ws.Endpoint;
public class MyServer {
public static void main(String[] args) {
Endpoint.publish("http://localhost:9999/webservice", new MyServiceInterImpl());
System.out.println("publish success");
}
}
然后,我们新建一个SoapTest类,首先来看看怎样封装soap消息:
packagecom.zhutulang.soap;
importjava.io.IOException;
importjavax.xml.namespace.QName;
importjavax.xml.soap.MessageFactory;
importjavax.xml.soap.SOAPBody;
importjavax.xml.soap.SOAPBodyElement;
importjavax.xml.soap.SOAPEnvelope;
importjavax.xml.soap.SOAPException;
importjavax.xml.soap.SOAPMessage;
importjavax.xml.soap.SOAPPart;
importorg.junit.Test;
public class SoapTest {
@Test
public void test1() throws SOAPException, IOException{
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage message = factory.createMessage();
SOAPPart part = message.getSOAPPart();
SOAPEnvelope envelope = part.getEnvelope();
SOAPBody body = envelope.getBody();
QName qName = new QName("http://soap.zhutulang.com/", "add", "ns");
SOAPBodyElement element = body.addBodyElement(qName);
element.addChildElement("a").setValue("120");
element.addChildElement("b").setValue("220");
message.writeTo(System.out);
}
}
其中,QName(String namespaceURI,String localPart,String prefix)各参数含义是 命名空间 URI、本地部分和前缀的 QName。
下面是一个发送soap消息并接受返回消息的方法示例:
/**
* <p>Title: test2</p>
* <p>Description:发送接收soap消息 </p>
* @author zhutulang
* @version 1.0
* @throws SOAPException
* @throws IOException
*/
@Test
public void test2() throws SOAPException, IOException{
//1.创建服务
URL url = new URL(wsdlUrl);
QName qName = new QName(namespaceUrl, "MyServiceInterImplService");
Service service = Service.create(url, qName);
//2.创建Dispatch
Dispatch<SOAPMessage> dispatch =
service.createDispatch(new QName(namespaceUrl, "MyServiceInterImplPort"), SOAPMessage.class, Service.Mode.MESSAGE);
//3.创建SOAPMessage
SOAPMessage msg = MessageFactory.newInstance().createMessage();
SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
SOAPBody body = envelope.getBody();
//4.创建QName来指定消息中传递的数据
QName ename = new QName(namespaceUrl, "add", "ns");
SOAPBodyElement element = body.addBodyElement(ename);
element.addChildElement("a").setValue("22");
element.addChildElement("b").setValue("33");
msg.writeTo(System.out);
System.out.println();
//5.通过Distpatch传递信息
SOAPMessage responseMsg = dispatch.invoke(msg);
responseMsg.writeTo(System.out);
System.out.println();
//6.将响应的消息转换为dom对象
Document doc = responseMsg.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();
String addResult = doc.getElementsByTagName("addResult").item(0).getTextContent();
System.out.println("addResult="+addResult);
}
相关的代码下载:http://download.csdn.net/detail/zhutulang/9487929