2009-05-06 12 views
22

एक ठेठ सोप ग्राहक JAX-WS का उपयोग कर अनुरोध का उपयोग हो सकता हैमैं जावा JAX-WS

FooService service = new FooService(); 
FooPort port = service.getFooPort(); 
FooPayload payload = new FooPayload(); 
payload.setHatSize(3); 
payload.setAlias("The Hat"); 
... 
port.processRequest(payload); 

यह

<?xml ... ?> 
<S:Envelope xmlns:S="http://...soap-envelope"> 
    <S:Body> 
    <!-- payload --> 
    </S:Body> 
</S:Envelope> 

की तरह एक HTTP अनुरोध सामग्री कुछ उत्पन्न करता है को नियंत्रित करके एक सोप हैडर कैसे जोड़ सकता हूँ port.processRequest() कॉल के लिए तर्क आप केवल "पेलोड" भाग को प्रभावित कर सकते हैं। आप एक्सएमएल संदेश के बाहरी हिस्से को प्रभावित नहीं कर सकते हैं।

मैं एक सोप हैडर सम्मिलित करना चाहते हैं बस से पहले साबुन शरीर

<S:Header> 
    <X:Security xmlns:X="http://...wsssecurity...> 
     <X:BinarySecurityToken>kjh...897=</X:BinarySecurityToken> 
    </X:Security> 
</S:Header> 

मुझे लगता है कि कैसे करते हैं?

+0

क्या डब्लूएसडीएल हेडर का वर्णन करता है? यदि ऐसा है, तो क्या JAX-WS कोड जोड़ने के लिए कोड उत्पन्न नहीं करता है? –

उत्तर

1

आप हैंडलर और हैंडलर श्रृंखलाओं को देखना चाहते हैं.- मुझे हाल ही में किसी दिए गए वेबसाइट सेवा कॉल में एक कुकी जोड़ना पड़ा था और इसी तरह मैंने ऐसा किया था, मैंने केवल एक हैंडलर बनाया जिसने प्रारंभिक कॉल को रोक दिया और कुकी को इंजेक्शन दिया, आप भी बस के रूप में जल्द ही मैं बाहर काम के रूप में करने के लिए stackoverflow.com ठीक से लॉग इन करने के लिए कैसे मैं आपके जवाब के साथ सही काम करेंगे, एक धुरी हैंडलर

18

धन्यवाद Nuno साथ कॉल हेडर में हेरफेर कर सकते हैं

मतलब समय यहाँ कोड मैं साथ समाप्त हो गया है: ऐड साबुन हेडर के लिए

FooService service = new FooService(); 
service.setHandlerResolver(new HandlerResolver() { 
    public List<Handler> getHandlerChain(PortInfo portInfo) { 
     List<Handler> handlerList = new ArrayList<Handler>(); 
     handlerList.add(new RGBSOAPHandler()); 
     return handlerList; 
    } 
}); 
FooPort port = service.getFooPort(); 
FooPayload payload = new FooPayload(); 
payload.setHatSize(3); 
payload.setAlias("The Hat"); 
... 
port.processRequest(payload); 

और

class RGBSOAPHandler implements SOAPHandler<SOAPMessageContext> { 

    public Set<QName> getHeaders() { 
     return new TreeSet(); 
    } 

    public boolean handleMessage(SOAPMessageContext context) { 
     Boolean outboundProperty = 
      (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); 
     if (outboundProperty.booleanValue()) { 
      SOAPMessage message = context.getMessage(); 
      try { 
       SOAPEnvelope envelope = context.getMessage() 
         .getSOAPPart().getEnvelope(); 
       SOAPFactory factory = SOAPFactory.newInstance(); 
       String prefix = "X"; 
       String uri = "http://...wsssecurity..."; 
       SOAPElement securityElem = 
         factory.createElement("Security",prefix,uri); 
       SOAPElement tokenElem = 
         factory.createElement("BinarySecurityToken",prefix,uri); 
       tokenElem.addTextNode("kjh...897="); 
       securityElem.addChildElement(tokenElem); 
       SOAPHeader header = envelope.addHeader(); 
       header.addChildElement(securityElem); 

      } catch (Exception e) { 
       System.out.println("Exception in handler: " + e); 
      } 
     } else { 
      // inbound 
     } 
     return true; 
    } 

    public boolean handleFault(SOAPMessageContext context) { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 

    public void close(MessageContext context) { 
     // 
    } 
} 
+0

मैं आपके जैसा ही सटीक कदम उठा रहा हूं, लेकिन मुझे निम्न अपवाद मिल रहा है: org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: उस नोड को सम्मिलित करने का प्रयास किया गया जहां इसकी अनुमति नहीं है। क्या आपको इस मुद्दे का सामना करना पड़ा है? ऐप वेबलॉगिक 10.1 पर चल रहा है – Vladimir

0

यदि आप वेब अनुप्रयोग सर्वर पर WS लागू, इच्छा थी जैसे कि वेब नीति आदि के रूप में शीर्ष लेख में सुरक्षा हिस्सा जोड़ने के लिए, के बाद आप प्रति WS-सुरक्षा मानक के रूप में कॉन्फ़िगर किया है, मुझे समझ नहीं आता क्यों इस तरह के एन्क्रिप्टेड पासवर्ड आदि के रूप में एन्क्रिप्टेड सामग्री भाग को छोड़कर अपने आप को जोड़ने के लिए, की जरूरत है

संबंधित मुद्दे