微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

webservice入门笔记二soap消息的处理

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,"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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐