Hi Dan, I don't think I'm even using the JaxbAssertionBuilder-- I think I do remember seeing where it got set to false though... but I'm not at my computer that I've got my work on. Let me see if I can find it in the online SVN view of the CXF code.
-Chris -----Original Message----- From: Dan Diephouse [mailto:[EMAIL PROTECTED] Sent: Fri 4/20/2007 5:44 PM To: [email protected] Subject: Re: Questions While Implementing MTOM Policy Actually, I think I see the issue: In JaxbAssertionBuilder.getOptionality it has this line: boolean optional = false; String value = element.getAttributeNS( Constants.Q_ELEM_OPTIONAL_ATTR.getNamespaceURI(), Constants.Q_ELEM_OPTIONAL_ATTR.getLocalPart()); if (Boolean.valueOf(value)) { optional = true; } return optional; The issue is that the attribute is NOT qualified. So I think it should just be: String value = element.getAttribute( Constants.Q_ELEM_OPTIONAL_ATTR.getLocalPart()); Does that fix things? - Dan On 4/20/07, Dan Diephouse <[EMAIL PROTECTED]> wrote: > > Hi Christopher, > > It sounds like a possible bug. The normalization logic looks right (for my > inexperienced eyes). It only adds a second All if optional is false. Do you > know where optional gets set to false? Only place I see that called is > JaxbAssertionBuilder:104... > > I'm not sure if you're doing this in your own build or within in the CXF > build, but you could possibly send a patch along and I'll try to take a > peek. Or, you can take a gander at fixing normalization yourself. I'll be > honest, I'm not that familiar with how normalization works yet in CXF, but > I'll see if I can help. > > - Dan > > On 4/20/07, Christopher Moesel <[EMAIL PROTECTED]> wrote: > > > > I fit in a little more work... It's almost their, except that even > > though I set my policy assertion to wsp:Optional="true", by the time it > > makes it to the interceptor, the optional attribute is false. > > > > If I debug, I can see that when the PrimitiveAssertion is built, it > > correctly sets the "optional" attribute to true. But somewhere down the > > line, the assertion is "normalized" and the optional flag gets reset to > > false. This appears to be happening in the PrimitiveAssertion.normalize > > method. The PolicyComponent returned is an ExactlyOne that contains two > > Alls. The first All has a PrimitiveAssertion with optional set to > > false. The second All is empty. > > > > Is this the intended behavior? Is this a translation of optional=true > > to an ExactlyOne with one required Assertion and one empty Assertion? > > If so, how can I tell the difference between that and optional=false > > from within an interceptor? > > > > Or does that question not even make sense? ;) > > > > -Chris > > > > -----Original Message----- > > From: Christopher Moesel [mailto:[EMAIL PROTECTED] ] > > Sent: Friday, April 20, 2007 4:16 PM > > To: [email protected] > > Subject: RE: Questions While Implementing MTOM Policy > > > > Thanks Dan-- that information has helped me get a bit further. I'm > > afraid I won't be able to do any more work on it until Monday though... > > I'll let you know how things are going... > > > > -Chris > > > > -----Original Message----- > > From: Dan Diephouse [mailto: [EMAIL PROTECTED] > > Sent: Friday, April 20, 2007 3:15 PM > > To: [email protected] > > Subject: Re: Questions While Implementing MTOM Policy > > > > Hi Christopher, > > > > A zip of the module or a paste of the interceptor, mtom-policy.xml file, > > and > > interceptor provider would be extremely helpful. > > > > Re question #2 - is your question how do I apply this mtom policy to my > > service? I think the two mechanisms we have right now are WSDL Policy > > Attachments and creating an external policy. I'm working on a third > > where we > > can embed it in an <endpoint>/<client> configuration. > > > > Here's a small example of how to load an external policy file: > > > > <bean class=" > > org.apache.cxf.ws.policy.attachment.external.ExternalAttachmentProvider" > > > > > <constructor-arg ref="cxf"/> > > <property name="location" > > value="org/apache/cxf/systest/ws/policy/addr-external.xml"/> > > </bean> > > > > And then the external file: > > > > <attachments xmlns:wsp=" http://www.w3.org/2006/07/ws-policy" > > xmlns:wsa=" > > http://www.w3.org/2005/08/addressing"> > > <wsp:PolicyAttachment> > > <wsp:AppliesTo> > > <wsa:EndpointReference> > > > > <wsa:Address>http://localhost:9020/SoapContext/GreeterPort > > </wsa:Address> > > </wsa:EndpointReference> > > </wsp:AppliesTo> > > <wsp:Policy> > > <wsam:Addressing xmlns:wsam=" > > http://www.w3.org/2007/01/addressing/metadata"> > > <wsp:Policy/> > > </wsam:Addressing> > > </wsp:Policy> > > </wsp:PolicyAttachment> > > </attachments> > > > > This is part of the policy system tests. How are you configuring your > > service right now? Via the API? Via Spring? > > - Dan > > > > On 4/20/07, Christopher Moesel < [EMAIL PROTECTED]> wrote: > > > > > > A Quick Update: > > > > > > I moved the bean configurations from the > > > META-INF/cxf/cxf-extension-mtom-policy.xml file to my service's own > > > Spring configuration file. Now I can see that my > > MTOMAssertionBuilder, > > > MTOMPolicyInterceptorProvider, and MTOMPolicyInterceptors are at least > > > instantiated (which is further than I got before). > > > > > > But, the handleMessage method on my MTOMPolicyInterceptor is never > > > called when I make a request to the service, so something still > > doesn't > > > seem to be registered right. > > > > > > So two questions now: > > > > > > 1) Why wasn't my META-INF/cxf/cxf-extension-mtom-policy.xml file > > never > > > loaded by the framework? > > > > > > 2) How do I get my service to actually build those assertions and > > > intercept the messages? > > > > > > Thanks, > > > Chris > > > > > > -----Original Message----- > > > From: Christopher Moesel [mailto:[EMAIL PROTECTED] > > > Sent: Friday, April 20, 2007 2:40 PM > > > To: [email protected] > > > Subject: Questions While Implementing MTOM Policy > > > > > > Hello, > > > > > > I'm trying to implement a plugin for the MTOM Policy specification. > > > This is essentially a policy that states whether or not MTOM should be > > > > > used (or is optional). I intend on contributing it back to CXF, so I > > > figure I'm OK sending this to the dev list. ;) > > > > > > I've created a MTOMAssertionBuilder that uses PrimitiveAssertions, a > > > MTOMPolicyInterceptor (that at this point just prints out if it is > > > asserted), and a MTOMPolicyInterceptorProvider. > > > > > > I've registered the MTOMAssertionBuilder and > > > MTOMPolicyInterceptorProvider in > > > META-INF/cxf/cxf-extension-mtom-policy.xml and created a corresponding > > > META-INF/cxf/cxf.extension file. According to the documentation, this > > > is all that is needed to register them in CXF. > > > > > > When I try my service (that has the ws-policy and ws-mtom-policy jars > > in > > > its classpath), none of my MTOM policy classes seem to be called. Do > > I > > > need to do something else to register them with my service, or is > > having > > > the policy assertion in the port of my WSDL file enough? It seems I > > > must be missing something important. > > > > > > If it would be helpful, I can zip up the module and send it along. > > > > > > Thanks! > > > Chris > > > > > > > > > > > -- > > Dan Diephouse > > Envoi Solutions > > http://envoisolutions.com | http://netzooid.com/blog > > > > > > -- > Dan Diephouse > Envoi Solutions > http://envoisolutions.com | http://netzooid.com/blog > -- Dan Diephouse Envoi Solutions http://envoisolutions.com | http://netzooid.com/blog
