<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java學習

    java學習

     

    soap消息的分析和消息的創(chuàng)建和傳遞和處理



    @WebService
    public interface IMyService {
     @WebResult(name="addResult")
     public int add(@WebParam(name="a")int a,@WebParam(name="b")int b);
     
     @WebResult(name="user")
     public User addUser(@WebParam(name="user")User user);
     
     @WebResult(name="user")
     public User login(@WebParam(name="username")String username,
           @WebParam(name="password")String password)throws UserException;
     
     @WebResult(name="user")
     public List<User> list(@WebParam(header=true,name="authInfo")String authInfo);
    }

    @XmlRootElement
    public class User {
     private int id;
     private String username;
     private String nickname;
     private String password;
     public int getId() {
      return id;
     }
     public void setId(int id) {
      this.id = id;
     }
     public String getUsername() {
      return username;
     }
     public void setUsername(String username) {
      this.username = username;
     }
     public String getNickname() {
      return nickname;
     }
     public void setNickname(String nickname) {
      this.nickname = nickname;
     }
     public String getPassword() {
      return password;
     }
     public void setPassword(String password) {
      this.password = password;
     }
     public User(int id, String username, String nickname, String password) {
      super();
      this.id = id;
      this.username = username;
      this.nickname = nickname;
      this.password = password;
     }
     public User() {
      super();
     }
     
     
     
    }

    public class MyServer {

     public static void main(String[] args) {
      Endpoint.publish("http://localhost:8989/ms", new MyServiceImpl());
     }

    }



    --

     

    @WebService(endpointInterface="org.soap.service.IMyService")
    @HandlerChain(file="handler-chain.xml")
    public class MyServiceImpl implements IMyService {
     private static List<User> users = new ArrayList<User>();
     
     public MyServiceImpl() {
      users.add(new User(1,"admin","","111111"));
     }

     @Override
     public int add(int a, int b) {
      System.out.println("a+b="+(a+b));
      return a+b;
     }

     @Override
     public User addUser(User user) {
      users.add(user);
      return user;
     }

     @Override
     public User login(String username, String password) throws UserException{
      for(User user:users) {
       if(username.equals(user.getUsername())&&password.equals(user.getPassword()))
        return user;
      }
      throw new UserException("");
     }

     @Override
     public List<User> list(String authInfo) {
      System.out.println(authInfo);
      return users;
     }

    }

    public class TestSoap {
     
     private static String ns = " private static String wsdlUrl = "http://localhost:8989/ms?wsdl";
           
            public static void main(String[] args){
                TestSoap.test03();
            }

     @Test
     public static void test01() {
      try {
       //1???????創(chuàng)建消息工廠???
       MessageFactory factory = MessageFactory.newInstance();
       //2????根據消息工廠創(chuàng)建SoapMessage
       SOAPMessage message = factory.createMessage();
       //3?????創(chuàng)建SOAPPart
       SOAPPart part = message.getSOAPPart();
       //4??獲取SOAPENvelope
       SOAPEnvelope envelope = part.getEnvelope();
       //5??可以通過SoapEnvelope有效的獲取相應的Body和Header等信息
       SOAPBody body = envelope.getBody();
       //6???根據Qname創(chuàng)建相應的節(jié)點(QName就是一個帶有命名空間的節(jié)點)????????????)
       QName qname = new QName("     "add","ns");//<ns:add xmlns="http://java.zttc.edu.cn/webservice"/>
       //?如果使用以下方式進行設置,會見<>轉換為&lt;和&gt
       //body.addBodyElement(qname).setValue("<a>1</a><b>2</b>");
       SOAPBodyElement ele = body.addBodyElement(qname);
       ele.addChildElement("a").setValue("22");
       ele.addChildElement("b").setValue("33");
       //打印消息信息
       message.writeTo(System.out);
      } catch (SOAPException e) {
       e.printStackTrace();
      } catch (IOException e) {
       e.printStackTrace();
      }
     }
     
     @Test//基于soap的消息傳遞
     public static void test02() {
      try {
       //1???創(chuàng)建服務(Service)
       URL url = new URL(wsdlUrl);
       QName sname = new QName(ns,"MyServiceImplService");
       Service service = Service.create(url,sname);
       
       //2????創(chuàng)建Dispatch
       Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"),
          SOAPMessage.class, Service.Mode.MESSAGE);
       
       //3????創(chuàng)建SOAPMessage
       SOAPMessage msg = MessageFactory.newInstance().createMessage();
       SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
       SOAPBody body = envelope.getBody();
       
       //4???創(chuàng)建QName來指定消息中傳遞數據????
       QName ename = new QName(ns,"add","nn");//<nn:add xmlns="xx"/>
       SOAPBodyElement ele = body.addBodyElement(ename);
       ele.addChildElement("a").setValue("22");
       ele.addChildElement("b").setValue("33");
       msg.writeTo(System.out);
       System.out.println("\n invoking.....");
       
       
       //5?通過Dispatch傳遞消息,會返回響應消息
       SOAPMessage response = dispatch.invoke(msg);
       response.writeTo(System.out);
       System.out.println("\n----------------------------------------");
       
       //??將響應的消息轉換為dom對象??
       Document doc = response.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();
       String str = doc.getElementsByTagName("addResult").item(0).getTextContent();
       System.out.println(str);
      } catch (SOAPException e) {
       e.printStackTrace();
      } catch (IOException e) {
       e.printStackTrace();
      }
     }
     
     @Test
     public static void test03() {
      try {
       //1?????創(chuàng)建服務(Service)
       URL url = new URL(wsdlUrl);
       QName sname = new QName(ns,"MyServiceImplService");
       Service service = Service.create(url,sname);
       
       //2???創(chuàng)建Dispatch(通過源數據的方式傳遞)
       Dispatch<Source> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"),
          Source.class, Service.Mode.PAYLOAD);
       //3???根據用戶對象創(chuàng)建相應的xml
       User user = new User(3,"zs","張三","11111");
                            //編排user對象
       JAXBContext ctx = JAXBContext.newInstance(User.class);
       Marshaller mar = ctx.createMarshaller();
                            //不會再創(chuàng)建xml的頭信息
       mar.setProperty(Marshaller.JAXB_FRAGMENT, true);
       StringWriter writer= new StringWriter();
       mar.marshal(user, writer);
       System.out.println("writer====="+writer);
       //4、封裝相應的part addUser
       String payload = "<xs:addUser xmlns:xs=\""+ns+"\">"+writer.toString()+"</xs:addUser>";
       System.out.println("payload====="+payload);
       StreamSource rs = new StreamSource(new StringReader(payload));
       
       //5?通過dispatch傳遞payload
       Source response = (Source)dispatch.invoke(rs);
       
       //6?將Source轉化為DOM進行操作,使用Transform對象轉換
       Transformer tran = TransformerFactory.newInstance().newTransformer();
       DOMResult result = new DOMResult();
       tran.transform(response, result);
       
       //7???處理相應信息(通過xpath處理)
       XPath xpath = XPathFactory.newInstance().newXPath();
       NodeList nl = (NodeList)xpath.evaluate("http://user", result.getNode(),XPathConstants.NODESET);
       User ru = (User)ctx.createUnmarshaller().unmarshal(nl.item(0));
       System.out.println(ru.getNickname());
      } catch (IOException e) {
       e.printStackTrace();
      } catch (JAXBException e) {
       e.printStackTrace();
      } catch (TransformerConfigurationException e) {
       e.printStackTrace();
      } catch (TransformerFactoryConfigurationError e) {
       e.printStackTrace();
      } catch (TransformerException e) {
       e.printStackTrace();
      } catch (XPathExpressionException e) {
       e.printStackTrace();
      }
     }

    posted on 2013-08-13 10:04 楊軍威 閱讀(1418) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網站導航:
     

    導航

    統(tǒng)計

    常用鏈接

    留言簿

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲AV中文无码乱人伦| 亚洲午夜国产精品| 国产精品视频免费| 亚洲av无码一区二区三区人妖| 免费中文字幕不卡视频| 久久99青青精品免费观看| 亚洲国产精品ⅴa在线观看| 青青草原亚洲视频| 好先生在线观看免费播放| 国产精品九九久久免费视频| 亚洲国产综合在线| 久久精品国产精品亚洲艾草网美妙 | 四虎AV永久在线精品免费观看| a级毛片100部免费观看| 亚洲中文字幕乱码AV波多JI | 亚洲人成网男女大片在线播放 | 亚洲中久无码永久在线观看同| 精品国产无限资源免费观看| 成人在线免费视频| 亚洲国产日韩综合久久精品| 国产亚洲精品观看91在线| 国产成人一区二区三区免费视频| 国产成人精品免费久久久久| 色吊丝性永久免费看码 | 一级毛片高清免费播放| 亚洲日本视频在线观看| 亚洲欧洲美洲无码精品VA| 全免费一级午夜毛片| 222www免费视频| 国产成人无码区免费内射一片色欲| 亚洲国产精品久久久久秋霞小| 亚洲bt加勒比一区二区| 国产成人精品曰本亚洲79ren| 最近中文字幕免费mv视频7| 99久久人妻精品免费一区| 精品多毛少妇人妻AV免费久久| 精品亚洲AV无码一区二区三区| 亚洲狠狠久久综合一区77777| 亚洲A∨午夜成人片精品网站| 全免费一级午夜毛片| 久久久久久国产a免费观看黄色大片 |