Hi all,

Has anyone out there managed to successfully use a JAXRPC handler to modify an 
incoming SOAP message?

My incoming SOAP message does not have the xsi type attribute (dodgy client?) 
so I'm writing a handler to insert it for me if it's not present.

I've had numerous problems already and I've copied over fixes from JBWS-464 
http://jira.jboss.org/jira/browse/JBWS-464.

Spefically I've patched my JBoss to use
src/main/org/jboss/axis/Attic/MessagePart.java 1.1.2.4
  | src/main/org/jboss/axis/message/Attic/SOAPElementAxisImpl.java 1.1.2.8
  | 
  | But not JavaProvider.java rev 1.1.2.3 because the changes got reverted soon 
after
  | 
  | 
  | And here's the handler code I'm using:
  | 
  |     public boolean handleRequest(MessageContext msgContext) {
  |   |         SOAPMessageContext smc = (SOAPMessageContext)msgContext;
  |   |         SOAPMessage msg = smc.getMessage();
  |   |         
  |   |         try {
  |   |                 SOAPBody sb = msg.getSOAPBody();
  |   |                 
  |   |                         NodeList list = 
sb.getElementsByTagName("multipart");
  |   |                         
  |   |                         if (list == null || list.getLength() == 0)
  |   |                                 return true;
  |   |                         else {
  |   |                                 for (int i = 0; i < list.getLength(); 
i++) {
  |   |                                         Node node = list.item(i);
  |   |                                         String ns = 
"http://www.w3.org/2001/XMLSchema-instance";;
  |   |                                                                         
                                        
  |   |                                         NamedNodeMap attributes = 
node.getAttributes();
  |   |                                         
  |   |                                         if (attributes == null)
  |   |                                                 continue;
  |   |                                         
  |   |                                         Node type = 
attributes.getNamedItem("type");
  |   |                                         
  |   |                                         if (type == null) {
  |   |                                                 Document doc = 
list.item(i).getOwnerDocument();
  |   |                                                 Attr attr = 
doc.createAttribute("xsi:type");
  |   |                                                 
attr.setValue("n1:Array");
  |   |                                                 
  |   |                                                 Node nn = 
attr.cloneNode(false);
  |   |                                                 
  |   |                                                 Node n = 
attributes.setNamedItem(nn);
  |   |                                         }
  |   |                                 }
  |   |                         }
  |   |                 
  |   |         } catch (SOAPException e) {
  |   |                 e.printStackTrace();
  |   |         }
  |   |                 
  |   |                 return true;
  |   |         }
  | 
  | 
  | 
  | I can see my attribute being added to the NamedNodeMap object (and the 
NamedNodeMap is live in the DOM so any changes should be reflected) but if I do 
a subsequent check on the SOAP message. My changes are not there. For brevity I 
haven't included above the code to check the SOAP message but here it is below:
  | 
  |                                 // Create transformer
  |   |                                         try {
  |   |                                     TransformerFactory tff = 
TransformerFactory.newInstance();
  |   |                                     Transformer tf = 
tff.newTransformer();
  |   | 
  |   |                                     // Get reply content
  |   |                                     Source sc = 
msg.getSOAPPart().getContent();
  |   | 
  |   |                                     // Set output transformation
  |   |                                     StreamResult result = new 
StreamResult(System.out);
  |   |                                     tf.transform(sc, result);
  |   |                                     System.out.println();            
  |   |                                     } catch (Exception e) {
  |   |                                       throw new JAXRPCException(e);
  |   |                                     }
  | 
  | 
  | Thanks,
  | Shin

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3911995#3911995

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3911995


-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
_______________________________________________
JBoss-user mailing list
JBoss-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to