Web Service SOAP Client 設置 SOAP Header 增加SOAP-Header

根據wsdl文件來生成java-ws調用client類:

wsimport -d bin -s src -p pakcageFolder http://ip/wsdlFiles/sendService.wsdl

javax.xml.ws.Endpoint暴露一個wsdl:

使用 apt 編譯 

apt -d com EndPointServer.java 

使用java com.EndPointServer運行,然後將瀏覽器指向http://ip/EndPointServer?wsdl就會出wsdl內容。


文章來源: http://blog.csdn.net/east271536394/article/details/6699222

增加SOAP-Header,進行對客戶端的驗證。在Client 做法如下:

soap信息爲:

[html] view plaincopy
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">  
  2. <soapenv:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">  
  3. <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">  
  4. <wsse:Username>East</wsse:Username>  
  5. <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">XTsaiyy</wsse:Password>  
  6. </wsse:UsernameToken>  
  7. </wsse:Security>  
  8. </soapenv:Header>  
  9. <soapenv:Body><ns3:getAllCountries xmlns:ns2="http://schema.ultraservice.neustar.com/v01/" xmlns:ns3="http://webservice.api.ultra.neustar.com/v01/"/></soapenv:Body>  
  10. </soapenv:Envelope>  

SOAP-header  Client中加入SOAP-Header 來做相關的驗證信息呢!代碼實現如下:

1. HeaderHandler.java 類

[java] view plaincopy
  1. package cn.ultradns.soap.header;  
  2.   
  3. import java.util.Set;  
  4.   
  5. import javax.xml.namespace.QName;  
  6. import javax.xml.soap.SOAPBody;  
  7. import javax.xml.soap.SOAPElement;  
  8. import javax.xml.soap.SOAPEnvelope;  
  9. import javax.xml.soap.SOAPHeader;  
  10. import javax.xml.soap.SOAPMessage;  
  11. import javax.xml.ws.handler.MessageContext;  
  12. import javax.xml.ws.handler.soap.SOAPHandler;  
  13. import javax.xml.ws.handler.soap.SOAPMessageContext;  
  14.   
  15.   
  16. /** 
  17.  *  
  18.  * @author zhangdongfang 
  19.  *  
  20.  * 2011-8-18 
  21.  */  
  22. public class HeaderHandler implements SOAPHandler<SOAPMessageContext> {  
  23.   
  24.     public boolean handleMessage(SOAPMessageContext smc) {  
  25.   
  26.         Boolean outboundProperty = (Boolean) smc  
  27.                 .get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);  
  28.   
  29.         if (outboundProperty.booleanValue()) {  
  30.   
  31.             SOAPMessage message = smc.getMessage();  
  32.               
  33.             try {  
  34.                 SOAPBody body =smc.getMessage().getSOAPPart().getEnvelope().getBody();  
  35.                 body.setPrefix("soapenv");  
  36.                   
  37.                 SOAPEnvelope envelope = smc.getMessage().getSOAPPart()  
  38.                         .getEnvelope();  
  39.                 envelope.setPrefix("soapenv");  
  40.                   
  41.                 SOAPHeader header = envelope.addHeader();  
  42.                 header.setPrefix("soapenv");  
  43.                 SOAPElement security = header  
  44.                         .addChildElement(  
  45.                                 "Security",  
  46.                                 "wsse",  
  47.                                 "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");  
  48.   
  49.                 SOAPElement usernameToken = security.addChildElement(  
  50.                         "UsernameToken""wsse");  
  51.                 usernameToken  
  52.                         .addAttribute(  
  53.                                 new QName("xmlns:wsu"),  
  54.                                 "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");  
  55.   
  56.                 SOAPElement username = usernameToken.addChildElement(  
  57.                         "Username""wsse");  
  58.                 username.addTextNode("knetdns");  
  59.   
  60.                 SOAPElement password = usernameToken.addChildElement(  
  61.                         "Password""wsse");  
  62.                 password  
  63.                         .setAttribute(  
  64.                                 "Type",  
  65.                                 "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");  
  66.                 password.addTextNode("XTsaiyy!!");  
  67.   
  68.                 // Print out the outbound SOAP message to System.out  
  69.                 message.writeTo(System.out);  
  70.                 System.out.println("");  
  71.   
  72.             } catch (Exception e) {  
  73.                 e.printStackTrace();  
  74.             }  
  75.   
  76.         } else {  
  77.             try {  
  78.   
  79.                 // This handler does nothing with the response from the Web  
  80.                 // Service so  
  81.                 // we just print out the SOAP message.  
  82.                 SOAPMessage message = smc.getMessage();  
  83.                 message.writeTo(System.out);  
  84.                 System.out.println("");  
  85.   
  86.             } catch (Exception ex) {  
  87.                 ex.printStackTrace();  
  88.             }  
  89.         }  
  90.   
  91.         return outboundProperty;  
  92.   
  93.     }  
  94.   
  95.     public Set getHeaders() {  
  96.         return null;  
  97.     }  
  98.   
  99.     public boolean handleFault(SOAPMessageContext context) {  
  100.         return true;  
  101.     }  
  102.   
  103.     public void close(MessageContext context) {  
  104.     }  
  105.   
  106. }  


2. HeaderHandlerResolver.java 類

[java] view plaincopy
  1. package cn.ultradns.soap.header;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5. import javax.xml.ws.handler.Handler;  
  6. import javax.xml.ws.handler.HandlerResolver;  
  7. import javax.xml.ws.handler.PortInfo;  
  8.   
  9. /** 
  10.  *  
  11.  * @author zhangdongfang 
  12.  *  
  13.  * 2011-8-18 
  14.  */  
  15. public class HeaderHandlerResolver implements HandlerResolver {  
  16.   
  17.     public List<Handler> getHandlerChain(PortInfo portInfo) {  
  18.         List<Handler> handlerChain = new ArrayList<Handler>();  
  19.         HeaderHandler hh = new HeaderHandler();  
  20.   
  21.         handlerChain.add(hh);  
  22.   
  23.         return handlerChain;  
  24.     }  
  25. }  


3. 在web-services 調用時設置就OK

[java] view plaincopy
  1. @Before  
  2. public void init() {  
  3.     UltraWebServiceV01Service service = new UltraWebServiceV01Service();  
  4.     service.setHandlerResolver(new HeaderHandlerResolver());  
  5.     portType = service.getUltraWebServiceV01Port();  
  6. }  


此文章主要用於設置webService 的非法調用,必需是合法的用戶,而用戶提交的信息存放在soap-header中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章