Hi Dan,
Great!  That worked with the expected messageContext.put() after changing this 
line in your patch to:
maps = 
(AddressingPropertiesImpl)message.getExchange().getInMessage().get(mapProperty);

For obvious reasons :-)  Thanks so much!  It's much better from the user point 
of view this way.

Do you want me to create an issue in Jira or you already are taking care of 
that?

Thanks,
Jesse

-----Original Message-----
From: Daniel Kulp [mailto:dk...@apache.org] 
Sent: Friday, September 09, 2011 2:13 PM
To: users@cxf.apache.org
Cc: Jesse Pangburn
Subject: Re: jaxws Provider doesn't allow override of outbound ws addressing 
headers


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