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: [email protected]
> 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/GetStatus";></
> 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: [email protected]
> > 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#R2208
> > [2]
> >
>
http://www.ws-i.org/Profiles/BasicProfile-1.1-2004-08-24.html#R2738
> > 
> > > -----Original Message-----
> > > From: Christopher Moesel
> > [mailto:[EMAIL PROTECTED] 
> > > Sent: 04 April 2007 22:54
> > > To: [email protected]
> > > 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: [email protected]
> > > 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: [email protected]
> > > 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

Reply via email to