webservice系統學習筆記6-使用soap的header傳遞消息


1、顯示的使用soap的header傳遞消息(不推薦使用,會破壞正常的代碼結構,推薦使用handler處理)

 @WebResult(name="deleteResult")
    public boolean deleteUser(@WebParam(header=true,name="adminName")String adminName,@WebParam(name="deleteName")String delName);
@Override
    public boolean deleteUser(String adminName, String delName) {
        return true;
    }

wsdl:

xsd文件

調用代碼:

 

/**
     * 使用了SOAP的hearder來傳遞消息(缺點:會改變方法的參數定義)
     */
    @Test
    public void test4(){
        try {
            String namespace = "http://ws01.yzl.com/";
            String wsdlUrl = "http://localhost:8888/ws01?wsdl";
        
            //1、創建服務(Service)
            URL url = new URL(wsdlUrl);
            QName qname = new QName(namespace,"MyServiceImplService");
            Service service = Service.create(url, qname);
            
            //2、創建Dispatch
            //public interface Dispatch<T>extends BindingProviderDispatch 接口提供對動態調用服務端點操作的支持。javax.xml.ws.Service 接口作為創建 Dispatch 實例的工廠。 
            Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(namespace,"MyServiceImplPort"), SOAPMessage.class, Service.Mode.MESSAGE);
            
            //3.1、創建SOAPMessage
            SOAPMessage message = MessageFactory.newInstance().createMessage();
            SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
            SOAPBody body = envelope.getBody();
            
            //3.2、處理header信息
            SOAPHeader header = envelope.getHeader();
            if(header==null) header = envelope.addHeader();
            QName hname = new QName(namespace,"adminName","nn");
            header.addHeaderElement(hname).setValue("administrator");
            
            
            //4、創建QName來指定消息中傳遞數據
            QName ename = new QName(namespace,"deleteUser","nn");
            body.addBodyElement(ename);
            message.writeTo(System.out);
  System.out.println();
//5、通過Dispatch傳遞消息,並返回響應消息 SOAPMessage returnMessage = dispatch.invoke(message); returnMessage.writeTo(System.out);//打印返回消息 System.out.println(); //5、解析返回的SOAP消息的XML Document doc = returnMessage.getSOAPBody().extractContentAsDocument(); //Document doc = returnMessage.getSOAPPart().getEnvelope().getBody().extractContentAsDocument(); String result = doc.getElementsByTagName("deleteResult").item(0).getTextContent(); System.out.println("result is :" + result); } catch (Exception e) { e.printStackTrace(); } }

 結果:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <
SOAP-ENV:Header><nn:adminName xmlns:nn="http://ws01.yzl.com/">administrator</nn:adminName></SOAP-ENV:Header>
  <
SOAP-ENV:Body><nn:deleteUser xmlns:nn="http://ws01.yzl.com/"/></SOAP-ENV:Body>
</
SOAP-ENV:Envelope> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <
S:Header/>
  <
S:Body>
    <
ns2:deleteUserResponse xmlns:ns2="http://ws01.yzl.com/"><deleteResult>true</deleteResult></ns2:deleteUserResponse>
  </
S:Body>
</
S:Envelope> result is :true


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM