This might be a simple enhancement request.   Are you able to build CXF source 
and test?    I think a simple change like:

--- a/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
+++ b/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
@@ -279,6 +279,9 @@ public final class ContextUtils {
                 mapProperty);
         AddressingPropertiesImpl maps =
             (AddressingPropertiesImpl)message.get(mapProperty);
+        if (maps == null && isOutbound && !isRequestor) {
+            message.getExchange().getInMessage().get(mapProperty);
+        }
         if (maps != null) {
             LOG.log(Level.FINE, "current MAPs {0}", maps);
         } else if (!isProviderContext) {


would work in this case.    Basically, on the outbound server side, if the 
message doesn't have the map with the key, check the inbound message (where 
the JAX-WS context would have stored it).

Dan



On Wednesday, September 07, 2011 9:26:31 PM Jesse Pangburn wrote:
> Debugging through the code illustrates that you can't just set this property
> on the MessageContext object for the Provider, you must set it on the
> outbound message object, like this:
> ((org.apache.cxf.jaxws.context.WrappedMessageContext)messageContext).getWra
> ppedMessage().getExchange().getOutMessage().put(JAXWSAConstants.SERVER_ADDRE
> SSING_PROPERTIES_OUTBOUND, wsaServer);
> 
> So the working code for me becomes something like:
> AddressingProperties wsaServer = new AddressingPropertiesImpl();
> AttributedURIType aut = new AttributedURIType();
> aut.setValue("urn:get:some");
> wsaServer.setAction(aut);
> ((org.apache.cxf.jaxws.context.WrappedMessageContext)messageContext).getWrap
> pedMessage().getExchange().getOutMessage().put(JAXWSAConstants.SERVER_ADDRES
> SING_PROPERTIES_OUTBOUND, wsaServer);
> 
> I've tried overriding the message id and the action headers, both were
> successful.  Still, I'm wondering if it's a bug to have to jump through all
> these hoops to set that on the outbound message.  Shouldn't it inherit from
> the MessageContext or something?  The outbound message seems to get the
> inbound addressing properties assigned just fine.
> 
> Thanks,
> Jesse
> 
> -----Original Message-----
> From: Jesse Pangburn [mailto:jesse.pangb...@us.lawson.com]
> Sent: Wednesday, September 07, 2011 5:24 PM
> To: users@cxf.apache.org
> Subject: jaxws Provider doesn't allow override of outbound ws addressing
> headers
> 
> Hi,
> I have a jaxws Provider configured to do WS-Addressing and the defaults seem
> to work fine.  However, if I try to override some of the WS-Addressing
> headers in the MessageContext, it gets ignored.  I've tried the following :
> 
> AddressingProperties wsaServer = new AddressingPropertiesImpl();
> AttributedURIType aut = new AttributedURIType();
> aut.setValue("urn:get:some");
> wsaServer.setAction(aut);
> messageContext.put(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND,
> wsaServer);
> 
> But the Action header sent in the response is the default from the WSDL, not
> my override value.  Am I doing something wrong or this never worked?  I've
> tried doing:
> messageContext.get(JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND)
> 
> But that returns null, so I've been using the put instead.  I tried
> overriding the messageId as well, but that didn't work either.
> 
> Thanks,
> Jesse
-- 
Daniel Kulp
dk...@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com

Reply via email to