Use WS-Addressing with XFireProxy client
----------------------------------------

         Key: XFIRE-347
         URL: http://jira.codehaus.org/browse/XFIRE-347
     Project: XFire
        Type: Improvement

  Components: Core  
    Versions: 1.1-beta-1    
 Environment: Java 5 on Linux
    Reporter: Bernd Schuller
 Assigned to: Dan Diephouse 
     Fix For: 1.1


When using the XFireProxy client to access a WS-Addressing enabled service, I 
found it impossible to add headers such as wsa:To using the procedures outlined 
in the user's guide. This is due to the fact that the user cannot set any 
additional headers to be inserted.

A possible workaround/solution looks as follows.

1. Define a new out Handler 

public class MyAddressingOutHandler extends AddressingOutHandler {
        Map properties;
        
        public MyAddressingOutHandler(Map properties){
                this.properties=properties;
        }
        
       public void invoke(MessageContext context) throws Exception{
                AddressingHeaders headers = (AddressingHeaders) 
properties.get(AddressingInHandler.ADRESSING_HEADERS);
        AddressingHeadersFactory factory = (AddressingHeadersFactory) 
properties.get(AddressingInHandler.ADRESSING_FACTORY);
        
context.getCurrentMessage().setProperty(AddressingInHandler.ADRESSING_HEADERS,headers);
        
context.getCurrentMessage().setProperty(AddressingInHandler.ADRESSING_FACTORY,factory);
                super.invoke(context);
        }       
}

2. add the new handler to the xfire outhandlers

3. set the properties before invoking the proxy:

                        Map properties=new HashMap();
                        AddressingHeaders ah=new AddressingHeaders();
                        ah.setAction("....");
                        ah.setTo("......");
                        
properties.put(AddressingInHandler.ADRESSING_HEADERS.toString(),ah);
                        
properties.put(AddressingInHandler.ADRESSING_FACTORY.toString(),new 
AddressingHeadersFactory200508());                  
                        DefaultXFire 
xfire=(DefaultXFire)XFireFactory.newInstance().getXFire();
                        xfire.addOutHandler(new 
MyAddressingOutHandler(properties));
                        

A real solution could be to copy the properties from the Service used to create 
the proxy into the message context created in Client.invoke(), then the 
standard wsa out handler would pick them up.


sorry for the long rant :) 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to