The real eye-opener for me was finally understanding that the xsi:type specified for an encoded message part must be treated as an abstract type. This finally made the distinction between rpc/encoded and rpc/literal apparent to me and made me realize that I've mentally been in an rpc/literal world while thinking I was in an rpc/encoded one.
Scott Nichol Do not send e-mail directly to this e-mail address, because it is filtered to accept only mail from specific mail lists. ----- Original Message ----- From: "Anne Thomas Manes" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Thursday, July 24, 2003 12:20 AM Subject: Re: TargetObjectURI > Steve, > > I don't think this issue is obvious at all. The SOAP encoding model is a > very complicated system. Scott's been doing SOAP for a long time, but I > don't think he fully groked it's implications until you raised the question. > > Anne > > ----- Original Message ----- > From: "Steve Pruitt" <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Sent: Tuesday, July 22, 2003 6:14 PM > Subject: RE: TargetObjectURI > > > I would like to thank both Scott and Anne for making what is probably > obvious to many, finally obvious to me. > > -Steve Pruitt > > > Anne, > > Thanks for this clarification. It got me to read section 3.5 of the WSDL > 1.1 spec more closely. Given that the "encoded" style implies that all part > types must be interpretted as abstract, I finally understand why its use is > being discouraged! > > Scott Nichol > > Do not send e-mail directly to this e-mail address, > because it is filtered to accept only mail from > specific mail lists. > > ----- Original Message ----- > From: "Anne Thomas Manes" <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Sent: Monday, July 21, 2003 9:43 PM > Subject: Re: TargetObjectURI > > > > A SOAP runtime system uses the QName of the child element of the > > soap-env:body to determine what type of SOAP message it has received and > > what to do with it. The TargetObjectURI defines the namespace for that > > QName. That combined with the element's local name specifies the complete > > QName. > > > > When using document literal, the child element of the soap-env:body has a > > predefined QName. It is specified in the schema definition in the > wsdl:types > > section. Hence the TargetObjectURI should be the same as the > targetNamespace > > in the <schema> section in the <types> section. > > > > If you are using rpc/encoded, then the SOAP runtime dynamically constructs > > the SOAP message using the SOAP encoding data model, and it uses the > > wsdl:operation name (the method name) as the child element of the > > soap-env:body. There is no schema that defines this element, and no > > predefined namespace. Therefore you should specify a namespace attribute > in > > the soap:input and soap:output elements in the wsdl:binding definition, > > e.g., > > > > <wsdl:binding name="foo" type="tns:bar"> > > <soap:binding style="rpc" > > transport="http://schemas.xmlsoap.org/soap/http"/> > > <wsdl:operation name="foobar"> > > <soap:operation soapAction="" style="rpc"/> > > <wsdl:input> > > <soap:body > > namespace="urn:foobar" > > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" > > use="encoded"/> > > </wsdl:input> > > <wsdl:output> > > <soap:body > > namespace="urn:foobar" > > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" > > use="encoded"/> > > </wsdl:output> > > </wsdl:operation> > > </wsdl:binding> > > > > That namespace can be the same as your wsdl targetNamespace, but it > doesn't > > need to be. It can be any namespace you want it to be. You just want to > make > > sure that your QName provides enough information to your SOAP server to > > indicate how to process the message. > > > > Best regards, > > Anne > > > > > > ----- Original Message ----- > > From: "Steve Pruitt" <[EMAIL PROTECTED]> > > To: <[EMAIL PROTECTED]> > > Sent: Friday, July 18, 2003 10:31 AM > > Subject: RE: TargetObjectURI > > > > > > The heart of my question is basically interoperability. I am trying to > > compose a SOAP message by parsing a WSDL file and without any specific > soap > > platform knowledge. I have not seen any sort of matrix specifying what > the > > various platform vendors require. If the WSDL has the SOAP Action set, > then > > naturally I assume this required. But, the TargetObjectURI remains > > problematic to me. I have been using the namespace URI of the first child > > element of the body. But this seems "squishy" in light of Scott's > response > > below. > > > > From the response below... > > > > If the soap:body namespace is of no use, then I am a bit confused about > what > > to do. Not sure where a namespace can be explicitly specified in a > message > > definition? The soap:body and soap:header are the only tags with a > > namespace attribute. Should I always use the wsdl:definition > > targetNamespace attribute? I have found wsdls where the wsdl:definition > > targetNamespace and the soap:body namespace attibutes are different, so I > am > > a bit confused about that. > > > > Hopefully, I am not the only one clueless about this and others face the > > same issue or similar issue. > > > > > > Steve Pruitt > > > > > > > > > > The TargetObjectURI is always the namespace of the element representing > the > > SOAP call. For example, in the envelope > > > > > > <?xml version='1.0' encoding='UTF-8'?> > > <SOAP-ENV:Envelope > > xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" > > > xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" > > xmlns:xsd="http://www.w3.org/1999/XMLSchema"> > > <SOAP-ENV:Body> > > <ns1:helloString xmlns:ns1="urn:hello1" > > > SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> > > <name xsi:type="xsd:string">Bill</name> > > </ns1:helloString> > > </SOAP-ENV:Body> > > </SOAP-ENV:Envelope> > > the TargetObjectURI is "urn:hello1". > > > > In WSDL, the namespace attribute of the soap:body element for a binding > > *may* be supplied, although the WSDL 1.1 spec says "the namespace > attribute > > only applies to content not explicitly defined by the abstract types". > > Therefore, in most WSDL, I do not think this should be of use, because the > > messages for operations are themselves in namespaces, which are the > > TargetObjectURI. The namespace may be explicitly specified in the message > > definition, or it may be implied by the targetNamespace attribute on an > > enclosing element, typically the wsdl:definition element. > > > > Scott Nichol > > > > Do not send e-mail directly to this e-mail address, > > because it is filtered to accept only mail from > > specific mail lists. > > ----- Original Message ----- > > From: "Steve Pruitt" <[EMAIL PROTECTED]> > > To: <[EMAIL PROTECTED]> > > Sent: Tuesday, July 15, 2003 9:54 AM > > Subject: TargetObjectURI > > > > > > All, > > > > How do you determine what WSDL value to use for setting the > TargetObjectURI? > > I am parsing a WSDL file at runtime and dynamically building the call. > With > > Apache I have been using the namespace from the soap body extension. But, > > what if the SOAP platform is unknown? I have looked at various WSDL > files. > > Sometimes the namespace attibute is not provided. What is used in this > > case? Are there any conventions? This is all still murky to me. > > > > > > -Steve Pruitt > > [EMAIL PROTECTED] > > > > > > > >