I have created a very simple example project that demonstrates the wsdl2java bug (where it excludes the headers from the message signature). It is attached to the bug that Dan D created: https://issues.apache.org/jira/browse/CXF-602
-Chris -----Original Message----- From: Dan Diephouse [mailto:[EMAIL PROTECTED] Sent: Wednesday, April 25, 2007 2:54 PM To: cxf-user@incubator.apache.org; [EMAIL PROTECTED] Subject: Re: How To Get Object From SOAP Header? I created a JIRA for this - https://issues.apache.org/jira/browse/CXF-602. Sounds like we should focus on getting these things fixed for 2.0. - Dan On 4/25/07, Daniel Kulp <[EMAIL PROTECTED]> wrote: > > > OK. It definitely doesn't work on the Ebay wsdl. :-( > > Dan > > > On Wednesday 25 April 2007 07:37, Daniel Kulp wrote: > > Chris, > > > > I believe CXF already does this. If the wsdl has a physical contract > > that has headers in a separate message, wsdl2java does put an extra > > parameter on the method with header="true" set. I tried this on a > > simple wsdl and it seems to generate the expected code. (don't > > actually have a service to check it against right now) Is there any > > chance you could try it on a couple of "real world" wsdls? > > > > I don't think round tripping would work though. wsdl2java, then > > java2wsdl would probably put the header into a single message. > > > > Dan > > > > On Tuesday 24 April 2007 09:03, Christopher Moesel wrote: > > > Yes, this would require the code generator to look at the physical > > > portion of the WSDL. I realize it's not ideal, but... again, if > > > it's happening in the real world, it needs to be considered. Has > > > CXF been tested as a client against eBay and Salesforce.com? > > > > > > -Chris > > > > > > -----Original Message----- > > > From: Johnson, Eric [mailto:[EMAIL PROTECTED] > > > Sent: Monday, April 23, 2007 5:17 PM > > > To: cxf-user@incubator.apache.org > > > Subject: RE: How To Get Object From SOAP Header? > > > > > > To do what you ask the code generators would need to generate code > > > based on the contents of the physical portion of the WSDL (aka the > > > wsdl:binding element) correct? > > > > > > > -----Original Message----- > > > > From: Christopher Moesel [mailto:[EMAIL PROTECTED] > > > > Sent: Monday, April 23, 2007 5:11 PM > > > > To: cxf-user@incubator.apache.org > > > > Subject: RE: How To Get Object From SOAP Header? > > > > > > > > Dan-- I think you may be talking about a slightly different issue? > > > > > > > > I don't want to disable headers inside wsdl2java. What I > > > > want is for wsdl2java to generate the header parameters in > > > > the interface even if the header object is not a part of the > > > > operation input (or output) message. > > > > > > > > For example, I want the following WSDL to cause the > > > > UserCredentialsType object to be passed in through the > > > > generated interface: > > > > > > > > <wsdl:message name="UserCredentials"> > > > > <wsdl:part name="credentials" > > > > element="types:UserCredentials"/> </wsdl:message> > > > > <wsdl:message name="MyOperationRequest"> > > > > <wsdl:part name="body" element="types:MyOperation"/> > > > > </wsdl:message> <!-- imagine other messages here... --> > > > > > > > > <wsdl:operation name="MyOperation"> > > > > <soap:operation soapAction=""/> > > > > <wsdl:input> > > > > <soap:header message="tns:UserCredentials" part="credentials" > > > > use="literal" /> > > > > <soap:body use="literal"/> > > > > </wsdl:input> > > > > <!-- imagine a wsdl:output and wsdl:fault here... --> > > > > </wsdl:operation> > > > > > > > > The current CXF wsdl2java will not create a parameter for the > > > > UserCredentialsType object, because it is not a wsdl:part of > > > > the MyOperationRequest message. This current behavior > > > > appears to be based on recommendation by WS-I (but not a > > > > mandatory rule by WS-I). > > > > > > > > XFire does indeed generate the header object parameter as > > > > expected in this case. I think XFire does the right thing, > > > > based on what I see out there in the real world. I'd like > > > > CXF to also do this. > > > > > > > > -Chris > > > > > > > > -----Original Message----- > > > > From: Dan Diephouse [mailto:[EMAIL PROTECTED] > > > > Sent: Monday, April 23, 2007 4:57 PM > > > > To: cxf-user@incubator.apache.org > > > > Subject: Re: How To Get Object From SOAP Header? > > > > > > > > I did one project where we did this via an Interceptor and a > > > > wsdl post processor. We wrote the WSDL without the header, > > > > generated the code, then at runtime we modified the WSDL > > > > document to add in the header. Our Interceptor was then > > > > responsible for parsing the header and authentication. > > > > > > > > I would like to find a better way to do this though. Maybe a > > > > flag to disable headers inside wsdl2java? > > > > > > > > Cheers, > > > > - Dan > > > > > > > > On 4/23/07, Christopher Moesel <[EMAIL PROTECTED]> wrote: > > > > > To bring up a point from a couple of weeks ago: > > > > > > > > > > I agree with Matthew-- CXF should support SOAP headers that are > > > > > > > > defined > > > > > > > > > in their own message (rather than having to make the header > > > > > > > > a part in > > > > > > > > > the operation's request message). This is much more concise and > > > > > is often seen in the real world. This is the way that the > > > > > > > > salesforce.com > > > > > > > > > enterprise WSDL is defined, as well as the eBay WSDL. > > > > > > > > > > Is this something that CXF could easily support? > > > > > > > > > > -Chris > > > > > > > > > > -----Original Message----- > > > > > From: Matthew Good [mailto:[EMAIL PROTECTED] > > > > > Sent: Thursday, April 05, 2007 3:11 PM > > > > > To: cxf-user@incubator.apache.org > > > > > Subject: RE: How To Get Object From SOAP Header? > > > > > > > > > > WS-I 2208 is a "MAY" clause. So using separate messages is WS-I > > > > > compliant. (You scared me for a second). > > > > > > > > > > The wrapped vs. bare is not explicitly set in the wsdl. Sure it > > > > > is somewhat specified based on those rules in jax-ws but a > > > > > source generation tool should have an option to override that as > > > > > > > > best it can. > > > > > > > > > As far as interoperability, WS-I is the only thing that we > > > > > > > > should have > > > > > > > > > to abide by (jax-ws - Java!). In .NET there is a switch > > > > > > > > for wrapped > > > > > > > > > vs. bare and I have found nothing that matters from an > > > > > interoperability standpoint which way the switch is set. The > > > > > resulting SOAP message is the same. > > > > > > > > > > So, doc/literal yes, use it. My opinion is that jax-ws trying > > > > > to determine wrapped vs. bare based on a bunch of rules is > > > > > > > > absurd. It's > > > > > > > > > really a developer preference. (I am talking wsdl first > > > > > > > > development > > > > > > > > > here). > > > > > > > > > > > > > > > --- Christopher Moesel <[EMAIL PROTECTED]> > > > > > > > > > > wrote: > > > > > > Yes, this is in fact what I had been doing... but when you > > > > > > define the header as a separate message, CXF doesn't pass the > > > > > > > > header object > > > > > > > > > > in as a parameter. So then, I'm not sure how to get > > > > > > > > access to it... > > > > > > > > > > Also, Gary Tully pointed out some recommendations in the > > > > > > > > WS-I Basic > > > > > > > > > > Profile that seem to suggest that the header should be a > > > > > > > > part in the > > > > > > > > > > same message as the body. But the wording is slightly > > > > > > ambiguous. > > > > > > > > > > > > I've started rewriting my implementation in the BARE > > > > > > > > style and I'm > > > > > > > > > > actually finding that I also might prefer it. My only > > > > > > > > hesitation is > > > > > > > > > > that it is my understanding that doc/literal wrapped is best > > > > > > for interoperability (but I can't recall where I picked that > > > > > > up). > > > > > > > > > > > > -Chris > > > > > > > > > > > > -----Original Message----- > > > > > > From: Matthew Good [mailto:[EMAIL PROTECTED] > > > > > > Sent: Thursday, April 05, 2007 1:20 PM > > > > > > To: cxf-user@incubator.apache.org > > > > > > Subject: RE: How To Get Object From SOAP Header? > > > > > > > > > > > > Not sure if this will help, but you can define the header as a > > > > > > separate message so that you message definitions still > > > > > > > > only have one > > > > > > > > > > part. (Don't take everything in this example literally as I > > > > > > like bare ;). > > > > > > > > > > > > > > > > > > <message name="Identifier"> > > > > > > <part name="Identifier" element="wse:Identifier" > > > > > > /> > > > > > > </message> > > > > > > <message name="GetStatusMsg"> > > > > > > <part name="body" element="wse:GetStatus" /> > > > > > > </message> > > > > > > ... > > > > > > <portType name="Manager"> > > > > > > <operation name="GetStatus"> > > > > > > <input message="tns:GetStatusMsg" /> > > > > > > <output message="tns:GetStatusResponseMsg" /> > > > > > > </operation> > > > > > > ... > > > > > > <binding name="SubManagerBinding" > > > > > > type="tns:SubscriptionManager"> > > > > > > <soap:binding style="document" > > > > > > > > > > transport="http://schemas.xmlsoap.org/soap/http"></soap:binding> > > > > > > > > > > > <operation name="GetStatus"> > > > > > > <soap:operation > > > > > > > > soapAction="http://schemas.xmlsoap.org/ws/2004/08/eventing/Get > > > > Status"></ > > > > > > > > > > soap:operation> > > > > > > <input> > > > > > > <soap:header message="tns:Identifier" > > > > > > part="Identifier" use="literal"/> > > > > > > <soap:body use="literal" /> > > > > > > </input> > > > > > > <output> > > > > > > <soap:body use="literal" /> > > > > > > </output> > > > > > > </operation> > > > > > > ... > > > > > > > > > > > > > > > > > > --- Christopher Moesel <[EMAIL PROTECTED]> > > > > > > > > > > > > wrote: > > > > > > > So... if the header must be defined as a part in > > > > > > > > > > > > the > > > > > > > > > > > > > message, then it is > > > > > > > impossible to use SOAP headers in a CXF > > > > > > > > > > > > doc/literal > > > > > > > > > > > > > wrapped service? > > > > > > > > > > > > > > Section 2.3.1.2 of the JAX-WS spec states that an operation > > > > > > > is only considered to be wrapper style if the input and > > > > > > > output messages each only have a *single* part. > > > > > > > > > > > > > > It appears that CXF honors the spec: after > > > > > > > > > > > > changing > > > > > > > > > > > > > my WSDL to specify > > > > > > > the header as a part in each message, CXF now generates the > > > > > > > service interface in the BARE style. > > > > > > > > > > > > > > Ugh. What to do? > > > > > > > > > > > > > > -Chris > > > > > > > > > > > > > > -----Original Message----- > > > > > > > From: Tully, Gary [mailto:[EMAIL PROTECTED] > > > > > > > Sent: Wednesday, April 04, 2007 6:13 PM > > > > > > > To: cxf-user@incubator.apache.org > > > > > > > Subject: RE: How To Get Object From SOAP Header? > > > > > > > > > > > > > > Hi Chris, > > > > > > > > > > > > > > From my reading of the basic profile I think the only > > > > > > > > the sample > > > > > > > > > > > wsdl is correct. > > > > > > > Check out these relevant bits[1][2] for some more detail. > > > > > > > > > > > > > > Hope this helps, > > > > > > > Gary. > > > > > > > > > > > > > > [1] > > > > > > > > > > http://www.ws-i.org/Profiles/BasicProfile-1.1-2004-08-24.html#R2 > > > > >20 8 > > > > > > > > > > > > [2] > > > > > > > > > > http://www.ws-i.org/Profiles/BasicProfile-1.1-2004-08-24.html#R2 > > > > >73 8 > > > > > > > > > > > > > -----Original Message----- > > > > > > > > From: Christopher Moesel > > > > > > > > > > > > > > [mailto:[EMAIL PROTECTED] > > > > > > > > > > > > > > > Sent: 04 April 2007 22:54 > > > > > > > > To: cxf-user@incubator.apache.org > > > > > > > > Subject: RE: How To Get Object From SOAP Header? > > > > > > > > > > > > > > > > Ugh. I apologize for the weird way my email > > > > > > > > > > > > > > client formatted > > > > > > > > > > > > > > > those xml fragments. I've tried to fix them > > > > > > > > > > > > > > below-- let's > > > > > > > > > > > > > > > see if it works! > > > > > > > > > > > > > > > > -----Original Message----- > > > > > > > > From: Christopher Moesel > > > > > > > > > > > > > > [mailto:[EMAIL PROTECTED] > > > > > > > > > > > > > > > Sent: Wednesday, April 04, 2007 5:51 PM > > > > > > > > To: cxf-user@incubator.apache.org > > > > > > > > Subject: RE: How To Get Object From SOAP Header? > > > > > > > > > > > > > > > > Actually, after looking at some of the CXF > > > > > > > > > > > > > > samples, I see > > > > > > > > > > > > > > > that CXF is expecting the WSDL to be a bit > > > > > > > > > > > > > > different than how > > > > > > > > > > > > > > > I have done it. > > > > > > > > > > > > > > > > CXF expects the header to be defined as a part > > > > > > > > > > > > in > > > > > > > > > > > > > the request > > > > > > > > > > > > > > > message, as well as to be specified in the > > > > > > > > > > > > > > wsdl:binding. For example: > > > > > > > > <wsdl:message name="MyOperationRequest"> > > > > > > > > <wsdl:part name="credentials" > > > > > > > > > > > > > > element="types:UserCredentials"/> > > > > > > > > > > > > > > > <wsdl:part name="body" > > > > > > > > > > > > > > element="types:MyOperation"/> </wsdl:message> > > > > > > > > > > > > > > > ... > > > > > > > > > > > > > > > > <wsdl:operation name="MyOperation"> > > > > > > > > <soap:operation soapAction=""/> > > > > > > > > <wsdl:input> > > > > > > > > <soap:header > > > > > > > > > > > > message="tns:MyOperationRequest" > > > > > > > > > > > > > part="credentials" > > > > > > > > > > > > > > > use="literal" /> > > > > > > > > <soap:body parts="body" use="literal"/> > > > > > > > > </wsdl:input> > > > > > > > > > > > > > > > > ... > > > > > > > > > > > > > > > > </wsdl:operation> > > > > > > > > > > > > > > > > My current WSDL defines a separate message type > > > > > > > > > > > > > > for the > > > > > > > > > > > > > > > header rather than adding it as a part in the > > > > > > > > > > > > > > request > > > > > > > > > > > > > > > message. It references this header in the > > > > > > > > > > > > > > wsdl:binding. > > > > > > > > > > > > > > > This worked in XFire: > > > > > > > > > > > > > > > > <wsdl:message name="UserCredentials"> > > > > > > > > <wsdl:part name="credentials" > > > > > > > > element="types:UserCredentials"/> > > > > > > > > > > > > </wsdl:message> > > > > > > > > > > > > > > <wsdl:message name="MyOperationRequest"> > > > > > > > > <wsdl:part name="body" > > > > > > > > > > > > > > element="types:MyOperation"/> </wsdl:message> > > > > > > > > > > > > > > > ... > > > > > > > > > > > > > > > > <wsdl:operation name="MyOperation"> > > > > > > > > <soap:operation soapAction=""/> > > > > > > > > <wsdl:input> > > > > > > > > <soap:header message="tns:UserCredentials" > > > > > > > > > > > > > > part="credentials" > > > > > > > > > > > > > > > use="literal" /> > > > > > > > > <soap:body use="literal"/> > > > > > > > > </wsdl:input> > > > > > > > > > > > > > > > > ... > > > > > > > > > > > > > > > > </wsdl:operation> > > > > > > > > > > > > > > > > Is my WSDL in bad form? Or is this something > > > > > > > > > > > > CXF > > > > > > > > > > > > > should be > > > > > > > > > > > > > > > able to handle? I prefer my current method as > > > > > > > > > > > > it > > > > > > > > > > > > > is a little > > > > > > > > > > > > > > > less verbose when re-using the header over > > > > > > > > > > > > several > > > > > > > > > > > > > operations. > > > > > > > > > > > > > > > Thanks, > > > > > > > > Chris > > > > > > > > > > > > > > > > -----Original Message----- > > > > > > > > From: Christopher Moesel > > > > > > > > > > > > > > [mailto:[EMAIL PROTECTED] > > > > > > > > > > > > > > > Sent: Wednesday, April 04, 2007 5:32 PM > > > > > > > > To: cxf-user@incubator.apache.org > > > > > > > > Subject: How To Get Object From SOAP Header? > > > > > > > > > > > > > > > > I have a custom authentication type that clients > > > > > > > > > > > > > > send me > > > > > > > > > > > > > > > through the SOAP header. In XFire, it generated > > > > > > > > > > > > > > the service > > > > > > > > > > > > > > > interface with the header message sent in as a > > > > > > > > > > > > > > parameter. > > > > > > > > > > > > > > > CXF does not do that. > > > > > > > > > > > > > > > > How can I get access to that data from within my > > > > > > > > > > > > > > service > > > > > > > > > > > > > > > implementation? > > > > > > > > > > > > > > > > Thanks, > > > > > > > > Chris > > > > > > > > > > > > Matthew Good > > > > > > [EMAIL PROTECTED] > > > > > > 720-320-8376 > > > > > > > > > > Matthew Good > > > > > [EMAIL PROTECTED] > > > > > 720-320-8376 > > > > > > > > -- > > > > Dan Diephouse > > > > Envoi Solutions > > > > http://envoisolutions.com | http://netzooid.com/blog > > -- > J. Daniel Kulp > Principal Engineer > IONA > P: 781-902-8727 C: 508-380-7194 > [EMAIL PROTECTED] > http://www.dankulp.com/blog > -- Dan Diephouse Envoi Solutions http://envoisolutions.com | http://netzooid.com/blog