Darn. Sorry for formatting. Let's try again:
<wsdl:portType name="DOIServicesPortType">
<wsdl:operation name="SuccessfulRenewalOperation">
<wsdl:input message="tns:SuccessfulRenewalRequestMessage"/>
<wsdl:output message="tns:SuccessfulRenewalResponseMessage"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="DOIServicesBinding" type="tns:DOIServicesPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="SuccessfulRenewalOperation">
<soap:operation
soapAction="http://az.gov/doi-ws/SuccessfulRenewalOperation"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
Doug,
Can you post the portType and binding definitions for this operation? There
might be something there that's not quite right.
Anne
On 6/27/06, Doug B <[EMAIL PROTECTED]> wrote:
>
Thanks again, Anne. I had read that first BP section, but not really
understanding the implications until some of this discussion. It makes more
sense now.
I did try with Axis 1.3, and it does the same thing, so it must be something
I'm just not quite grasping. But I'm content for now that I understand what
it's doing and somewhat why, so thanks for your time and effort. It's been a
couple years since I spent much time in the Axis newsgroup, but I remember
noting back then that your answers were thorough and knowledgable (even bought
a copy of your book), so I appreciate having your input on this.
Doug
On 6/27/06, Anne Thomas Manes < [EMAIL PROTECTED]> wrote:
>
Sorry -- there's no reason to run java2wsdl, but it really helps to run wsdl2java.
I'm not sure why it's producing the erroneous qname attribute in the
<operation> element. This could be a bug in Axis 1.2 (which had pretty sketchy
support for document/literal -- Axis 1.3 or 1.4 is much better).
Tell your customer to make the following change to the WSDD:
Change this:
<operation name="successfulRenewalOperation"
qname="SuccessfulRenewalOperation"
to this:
<operation name="successfulRenewalOperation"
qname="retNS:SuccessfulRenewalRequest"
In any case, to answer your questions...
The hosting server determines how to dispatch a request by looking at the QName of
the child element of the <soap:Body>. The configuration must provide the
hosting service with the necessary information to map the QName to an appropriate
method in the service agent.
See Section 4.7.6 in the WS-I Basic Profile:
4.7.6 Operation Signatures
Definition: operation signature
The profile defines the "operation signature" to be the fully qualified name of
the child element of SOAP body of the
SOAP input message described by an operation in a WSDL binding.
In the case of rpc-literal binding, the operation name is used as a wrapper for
the part accessors. In the
document-literal case, since a wrapper with the operation name is not present,
the message signatures must be correctly
designed so that they meet this requirement.
An endpoint that supports multiple operations must unambiguously identify the
operation being invoked based on the
input message that it receives. This is only possible if all the operations
specified in the wsdl:binding
associated with an endpoint have a unique operation signature.
R2710 The operations in a
wsdl:binding in a DESCRIPTION MUST result in operation signatures
that are different from one another.
And section 4.7.25 (second paragraph):
4.7.25 Describing SOAPAction
Interoperability testing has demonstrated that requiring the SOAPAction HTTP
header field-value to be quoted
increases interoperability of implementations. Even though HTTP allows for
header field-values to be
unquoted, some implementations require that the value be quoted.
The SOAPAction header is purely a hint to processors. All vital information
regarding the intent of a message
is carried in the envelope.
Regards,
Anne
On 6/27/06, Doug B < [EMAIL PROTECTED]> wrote:
>
But I'm trying to go the other direction. I don't want to have to run java2wsdl at all.
I want to handwrite the WSDL and use that as the contract for both the client and the
server. I want the "wsdl2java --server-side" to generate a deployable service
which matches and honors the original WSDL, including recognizing the specified operation
names.
I went ahead and generated server-side artifacts myself just to compare what I think my customer might be
seeing. It seems interesting to me that, in fact, the deploy.wsdd that is generated from the
"--server-side" option does contain the <operation> mappings - they're just looking for
what I'd consider the "wrong" qname:
<operation name="successfulRenewalOperation"
qname="SuccessfulRenewalOperation"
returnQName="retNS:SuccessfulRenewalResponse"
xmlns:retNS=" http://az.gov/doi"
returnType="rtns:SuccessfulRenewalResponseType"
xmlns:rtns=" http://az.gov/doi"
soapAction="http://az.gov/doi-ws/SuccessfulRenewalOperation" >
<parameter qname="pns:SuccessfulRenewalRequest"
xmlns:pns="http://az.gov/doi"
type="tns:SuccessfulRenewalRequestType"
xmlns:tns=" http://az.gov/doi"/>
</operation>
(This is either with or without the --noWrapped option.)
It gets the correct returnQName from the WSDL-defined response element,
including for another operation where that response name is not at all related
to the operation or request names, so why wouldn't it use the WSDL-defined
request element for the qname by default?
Regarding SOAPAction, so what is supposed to be *the standard* way the service endpoint knows what operation
is being requested? Is the "engine" supposed to have to make a best guess at mapping operation
"signatures" based on "parameters" (with manual override mapping allowed)? I guess I was
expecting something less ambiguous to be part of the specs or at least ws-i.
Doug
<snip>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]