Code generated by WSDL2Java references non-existent NMTokenHolder class
-----------------------------------------------------------------------

         Key: AXIS-2290
         URL: http://issues.apache.org/jira/browse/AXIS-2290
     Project: Apache Axis
        Type: Bug
  Components: WSDL processing  
    Versions: 1.3    
 Environment: Mac OS X 10.4.3, java full version "1.4.2_09-232"
    Reporter: Allen Cronce
    Priority: Minor


It looks like when you're using document wrapped style and have more than one 
out or inout parameters, Axis wants to wrap any outputted class in a "holder" 
class. That makes sense.

But in this case of my sample wsdl below, the code generated passes a 
org.apache.axis.holders.NMTokenHolder to the 
AxisprobSOAPBindingImpl.problemMessage method. This causes build errors because 
there is no NMTokenHolder class. There is only a TokenHolder class.

I've worked around the problem by manually editing the generated code to change 
the undefined NMTokenHolder to TokenHolder classes. But it's bothersome that 
Axis is generating code for classes that don't exist.

Here's a sample wsdl that reproduces the problem:

<?xml version="1.0" encoding="UTF-8"?>
<definitions targetNamespace="axisprob.wsdl" 
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/";
   xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/";
   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
   xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
   xmlns="http://schemas.xmlsoap.org/wsdl/"; 
xmlns:xs="http://www.w3.org/2001/XMLSchema";
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:wsdlns="axisprob.wsdl"
   xmlns:xsdns="axisprob.xsd">
   <!-- Imports -->
   <xs:import namespace="http://www.w3.org/XML/1998/namespace";
       schemaLocation="http://www.w3.org/2001/xml.xsd"/>
   <types>
       <xs:schema targetNamespace="axisprob.xsd" xmlns:xsdns="axisprob.xsd"
           xmlns:xs="http://www.w3.org/2001/XMLSchema";
           xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
           xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";>
           <!-- Types -->
           <!-- TextType -->
           <xs:complexType name="TextType" mixed="true">
               <xs:annotation>
                   <xs:documentation xml:lang="en"> This is a type definition 
for generic text in
                       XML. For maintenance reasons, it is preferable to use 
something like this
                       rather than the built-in datatype string, unless you 
have an absolute
                       requirement to use a simple datatype. </xs:documentation>
               </xs:annotation>
               <xs:sequence>
                   <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded"
                       processContents="lax"/>
               </xs:sequence>
               <xs:anyAttribute namespace="##any" processContents="lax"/>
           </xs:complexType>
           <!-- GUIDType -->
           <xs:simpleType name="GUIDType">
               <xs:annotation>
                   <xs:documentation xml:lang="en"> This is a type definition 
for globally unique
                       identifiers. </xs:documentation>
               </xs:annotation>
               <xs:restriction base="xs:NMTOKEN">
                   <xs:pattern
                       
value="[0-9,A-F,a-f]{8}-[0-9,A-F,a-f]{4}-[0-9,A-F,a-f]{4}-[0-9,A-F,a-f]{4}-[0-9,A-F,a-f]{12}"
                   />
               </xs:restriction>
           </xs:simpleType>
           <!-- RecordReferenceType -->
           <xs:simpleType name="RecordReferenceType">
               <xs:annotation>
                   <xs:documentation xml:lang="en"> This is a type definition 
for globally unique
                       identifiers. </xs:documentation>
               </xs:annotation>
               <xs:restriction base="xs:NMTOKEN"> </xs:restriction>
           </xs:simpleType>
           <!-- Methods signatures -->
           <!-- problemMessage -->
           <xs:element name="problemMessage">
               <xs:annotation>
                   <xs:documentation xml:lang="en"> NEEDS COMMENT 
</xs:documentation>
               </xs:annotation>
               <xs:complexType>
                   <xs:sequence>
                       <xs:element name="customerGUID" type="xsdns:GUIDType"/>
                       <xs:element name="customerReference" 
type="xsdns:TextType" minOccurs="0"
                           maxOccurs="1"/>
                   </xs:sequence>
               </xs:complexType>
           </xs:element>
           <!-- problemMessageResponse -->
           <xs:element name="problemMessageResponse">
               <xs:annotation>
                   <xs:documentation xml:lang="en"> NEEDS COMMENT 
</xs:documentation>
               </xs:annotation>
               <xs:complexType>
                   <xs:sequence>
                       <xs:element name="transactionRecordReference"
                           type="xsdns:RecordReferenceType"/>
                       <xs:element name="customerReference" 
type="xsdns:TextType" minOccurs="0"
                           maxOccurs="1"/>
                       <xs:element name="guid" type="xsdns:GUIDType"/>
                   </xs:sequence>
               </xs:complexType>
           </xs:element>
       </xs:schema>
   </types>
   <!-- Messages -->
   <!-- problemMessage message -->
   <message name="problemMessage">
       <part name="parameters" element="xsdns:problemMessage"/>
   </message>
   <message name="problemMessageResponse">
       <part name="parameters" element="xsdns:problemMessageResponse"/>
   </message>
   <!-- Port type -->
   <portType name="axisprobPortType">
       <!-- problemMessage -->
       <operation name="problemMessage">
           <input message="wsdlns:problemMessage"/>
           <output message="wsdlns:problemMessageResponse"/>
       </operation>
   </portType>
   <!-- Binding for axisprob Web APIs - Document style, SOAP over HTTP -->
   <binding name="axisprobSOAPBinding" type="wsdlns:axisprobPortType">
       <soap:binding style="document" 
transport="http://schemas.xmlsoap.org/soap/http"/>
       <!-- problemMessage -->
       <operation name="problemMessage">
           <soap:operation soapAction="urn:axisprob2Action"/>
           <input>
               <soap:body use="literal" namespace="axisprob.wsdl"/>
           </input>
           <output>
               <soap:body use="literal" namespace="axisprob.wsdl"/>
           </output>
       </operation>
   </binding>
   <!-- Endpoint for axisprob Web APIs -->
   <service name="axisprob2">
       <port name="axisprobPortType" binding="wsdlns:axisprobSOAPBinding">
           <soap:address 
location="http://localhost:4310/WebObjects/axisprob2.woa/wa/axisprob2"/>
       </port>
   </service>
</definitions>




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

Reply via email to