WSDLServiceBuilder uses the name of the schema type rather than the part name 
to create MessagePartInfo when using dynamic client
---------------------------------------------------------------------------------------------------------------------------------

         Key: XFIRE-394
         URL: http://jira.codehaus.org/browse/XFIRE-394
     Project: XFire
        Type: Bug

  Components: Core  
    Versions: 1.0, 1.1-RC1    
    Reporter: Ted Sanne
 Assigned to: Dan Diephouse 


In createMessageParts(MessagePartContainer info, Message msg) in 
org.codehaus.xfire.wsdl11.parser.WSDLServiceBuild there is the following code 
snippets:

QName typeName = entry.getTypeName();
            if (typeName != null)
            {
                QName partName = new QName(getTargetNamespace(), 
entry.getName());
                MessagePartInfo part = info.addMessagePart(typeName, null);
                part.setSchemaElement(false);
                part.setSchemaType(getBindingProvider().getSchemaType(typeName, 
service));
            }

            // We've got a concrete schema type
            QName elementName = entry.getElementName();
            if (elementName != null)
            {
                MessagePartInfo part = info.addMessagePart(elementName, null);

                part.setSchemaType(getBindingProvider().getSchemaType(typeName, 
service));
            }

Inside of both of the if tests, info.addMessage is called with the name of the 
schema type rather than the name of the part itself. When using the dynamic 
client calling an operation that lookes like this:

<wsdl:message name="getBatchDetailsRequest">
    <wsdl:part name="localId" type="xsd:string" />
    <wsdl:part name="trdProperties" type="xsd:boolean" />
    <wsdl:part name="propertyLog" type="xsd:boolean" />
    <wsdl:part name="stationList" type="xsd:boolean" />
    <wsdl:part name="transList" type="xsd:boolean" />
  </wsdl:message>

I get an error saying that there is no part named "string".

The code in WSDLServiceBuilder should should probably look like this:

// We're extending an abstract schema type
            QName typeName = entry.getTypeName();
            if (typeName != null)
            {
                QName partName = new QName(getTargetNamespace(), 
entry.getName());
                MessagePartInfo part = info.addMessagePart(partName, null);
                part.setSchemaElement(false);
                part.setSchemaType(getBindingProvider().getSchemaType(typeName, 
service));
            }

            // We've got a concrete schema type
            QName elementName = entry.getElementName();
            if (elementName != null)
            {
                 QName partName = new QName(getTargetNamespace(), 
entry.getName());
                MessagePartInfo part = info.addMessagePart(partName, null);

                
part.setSchemaType(getBindingProvider().getSchemaType(elementName, service));
            }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to