The behavior has been present since Muse 2.0 - the issue is the way we resolve all the WSDL content. WSDL4J doesn't give us access to the schemas/types, so we have to resolve the WSDL using DOM in order to look through the XSD definitions. When resolving the WSDL, we copy in the <types/> section, but not the <message/>s, because they would all of a sudden have a different namespace. We could keep all of the WSDLs in some kind of tree rather than merging them together, but this would be a lot more resource intensive (and a lot more work); because of that, we decided the simplest thing would be to copy in the <message/> elements. We already have to copy-and-paste the <operation/> elements because WSDL 1.1 does not have inheritance, so the addition of the <message/> elements wasn't seen as a major inconvenience.
The code for WSDL resolution is in org.apache.muse.ws.wsdl.WsdlUtils (createWSDL() is the starting point). If you have ideas on how to efficiently merge or resolve the WSDL so that <message/>s and <types/> can be resolved from imported WSDLs, we can always change that code to handle it. Dan "Vinh Nguyen \(vinguye2\)" <[EMAIL PROTECTED]> wrote on 04/02/2007 03:35:04 AM: > Hi Dan, > I'm a bit confused. According to the WSDL 1.1 spec: > > "The following types of definitions contained in a WSDL document may be > referenced: > WSDL definitions: service, port, message, bindings, and portType > ... > The use of the import element allows the separation of the different > elements of a service definition into independent documents, which can > then be imported as needed. This technique helps writing clearer service > definitions, by separating the definitions according to their level of > abstraction. It also maximizes the ability to reuse service definitions > of all kinds. As a result, WSDL documents structured in this way are > easier to use and maintain." > > This contradicts your statement: > > "...when you 'resolve' a WSDL by importing the WSDLs mentioned in its > <import/> elements, the <message/> elements get moved from one namespace > (in this case, WS-MEX) to another (your custom namespace)..." > > So beginning with Muse 2.2.0, having to copy the message elements from > one wsdl to another defeats the purpose of the "import" feature for WSDL > 1.1. > > This reminds me of the old C programming style were code is "inlined" at > compile time, versus the C++/Java style of include/imports so that code > in other APIs can be referenced without having to be rewritten. > > > > -----Original Message----- > From: Daniel Jemiolo [mailto:[EMAIL PROTECTED] > Sent: Friday, March 30, 2007 5:42 AM > To: [email protected] > Subject: Re: NotDocLiteral Error > > The problem has to do with WSDL formatting - you need to have all of > your <message/> elements in your actual WSDL (not imported). The problem > is that the 'name' attribute on <message/> elements is not qualified, so > it takes whatever namespace is in the current WSDL; well, when you > 'resolve' > a WSDL by importing the WSDLs mentioned in its <import/> elements, the > <message/> elements get moved from one namespace (in this case, WS-MEX) > to another (your custom namespace), and WSDL4J can't resolve them. > > All you need to do is copy the <message/> elements in. It's still fine > to keep the actual schema definitions in separate XSD files. Once you > move the <message/> elements, change the 'message' attributes on your > <operation/> elements (below) to use the target namespace of your WSDL, > not wsmex-w. > > Dan > > > > "Mrityunjay Hubli \(mjay\)" <[EMAIL PROTECTED]> wrote on 03/30/2007 > 06:52:18 > AM: > > > Hi All, > > > > I have the following operation in my wsdl > > > > <wsdl:import namespace="http://schemas.xmlsoap.org/ws/2004/09/mex" > > location="WS-MetadataExchange-2004_09.wsdl"/> > > ... > > <wsdl:operation name="GetMetadata"> > > <wsdl:input name="GetMetadataMsg" > > message="wsmex-w:GetMetadataMsg" > > wsa:Action="http://schemas.xmlsoap.org/ws/2004/09/mex/GetMetadata"/> > > <wsdl:output name="GetMetadataResponseMsg" > > message="wsmex-w:GetMetadataResponseMsg" > > > wsa:Action="http://schemas.xmlsoap.org/ws/2004/09/mex/GetMetadataRespons > > e"/> > > </wsdl:operation> > > > > ... > > > > In WS-MetadataExchange-2004_09.wsdl the messages are defined as : > > <wsdl:message name="GetMetadataMsg"> > > <wsdl:part name="body" element="tns:GetMetadata"/> > > </wsdl:message> > > <wsdl:message name="GetMetadataResponseMsg"> > > <wsdl:part name="body" element="tns:Metadata"/> > > </wsdl:message> > > > > When I run wsdl2java, I get the following error: > > java.lang.RuntimeException: [ID = 'NotDocLiteral'] The WSDL operation > > 'GetMetada > > ta' is not doc-literal because it defines a message with more than one > > message p > > art for its SOAP Body. The SOAP Body of a doc-literal message should > > contain one > > root request element (with the operation name) with zero or more > child > > elements > > (the parameters). > > > > I have Muse version 2.2.0 > > > > Any ideas about what could be the problem ? > > > > Thanks, > > M'Jay > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
