I am having trouble generating a set of Java classes from an existing WSDL file that
was originally generated for use in WebLogic Server 6.1. We are looking to duplicate
the Web Service functionality in Axis/Tomcat. The WSDL and the generated SOAP messages
must remain the same. It's the Java app that must work around this requirement. When I
run the WSDL2Java app, I receive the following exception:
#>java -cp %AXISCLASSPATH%;. org.apache.axis.wsdl.WSDL2Java MeterEvent.wsdl
java.io.IOException: Type {java:com.dsn.centralizedmeter.domain}MeterEvent is
referenced but not defined.
at
org.apache.axis.wsdl.symbolTable.SymbolTable.checkForUndefined(SymbolTable.java:667)
at org.apache.axis.wsdl.symbolTable.SymbolTable.add(SymbolTable.java:547)
at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:521)
at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:498)
at org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:374)
at java.lang.Thread.run(Thread.java:534)
This is the WSDL file I am using:
<?xml version="1.0" ?>
<definitions name="ADSN_MeterEventService"
targetNamespace="http://localhost:8081/MeterEventService/MeterEventService.wsdl"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://localhost:8081/MeterEventService/MeterEventService.wsdl"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:domain="java:com.dsn.centralizedmeter.domain">
<types>
<schema targetNamespace="java:com.dsn.centralizedmeter.domain"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<complexType name="MeterEvent">
<element name="partyId" type="xsd:int" maxOccurs="1" minOccurs="1" />
<element name="type" type="xsd:string" maxOccurs="1" minOccurs="1" />
<element name="dateTime" type="xsd:int" maxOccurs="1" minOccurs="1" />
<element name="product" type="xsd:string" maxOccurs="1" minOccurs="0" />
<element name="source" type="xsd:string" maxOccurs="1" minOccurs="0" />
<element name="market" type="xsd:string" maxOccurs="1" minOccurs="0" />
<element name="segment" type="xsd:string" maxOccurs="1" minOccurs="0" />
<element name="channel" type="xsd:string" maxOccurs="1" minOccurs="0" />
<element name="orderItem" type="xsd:string" maxOccurs="1" minOccurs="0" />
<element name="promotion" type="xsd:string" maxOccurs="1" minOccurs="0" />
<element name="lifespan" type="xsd:long" maxOccurs="1" minOccurs="0" />
<element name="quantity" type="xsd:int" maxOccurs="1" minOccurs="0" />
<element name="media" type="xsd:string" maxOccurs="1" minOccurs="0" />
<element name="size" type="xsd:double" maxOccurs="1" minOccurs="0" />
<element name="price" type="xsd:double" maxOccurs="1" minOccurs="0" />
<element name="transport" type="xsd:string" maxOccurs="1" minOccurs="0" />
<element name="requestLocation" type="xsd:string" maxOccurs="1"
minOccurs="0" />
<element name="fulfillmentLocation" type="xsd:string" maxOccurs="1"
minOccurs="0" />
</complexType>
</schema>
</types>
<message name="sendRequest">
<part name="message" type="domain:MeterEvent" />
</message>
<message name="sendResponse">
<part name="responseCode" type="xsd:int" />
</message>
<portType name="MeterEventServicePortType">
<operation name="submitEvent">
<input message="tns:sendRequest" />
<output message="tns:sendResponse" />
</operation>
</portType>
<binding name="MeterEventServiceBinding" type="tns:MeterEventServicePortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http/" />
<operation name="submitEvent">
<soap:operation soapAction="urn:submitEvent" />
<input>
<soap:body use="encoded"
namespace="urn:MeterEventService"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</input>
<output>
<soap:body use="encoded"
namespace="urn:MeterEventService"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</output>
</operation>
</binding>
<service name="MeterEventService">
<documentation>This service is a real-time event level web service. This is used
in
conjunction with other sub-components of the Event Collection
component.
</documentation>
<port name="MeterEventServicePort" binding="tns:MeterEventServiceBinding">
<soap:address location="http://localhost:8081/MeterEventService/submitevent" />
</port>
</service>
</definitions>
com.dsn.centralizedmeter.domain.MeterEvent is a Java class that maps to the MeterEvent
complexType from the WSDL. If I change
<message name="sendRequest">
<part name="message" type="domain:MeterEvent" />
</message>
to
<message name="sendRequest">
<part name="message" type="xsd:String" />
</message>
to remove the reference to the complexType, WSDL2Java works without problems.
Can anyone tell me what I am missing or doing wrong in this scenario? I have found
very little documentation regarding using custom Java classes as SOAP message types.
Thanks for your help.
--Jason
Jason Thompson
This message is for the designated recipient only and may contain privileged,
proprietary, or otherwise private information. If you have received it in error,
please notify the sender immediately and delete the original. Any other use of the
email by you is prohibited.