Hello,

I'm fairly new to Axis, and thought I had figured it out until I got to the typemapping. Since I have been unable to find a DTD/XSD for the WSDD file, I've had to try and use others' examples. This has consumed 10+ hours of my day now, so I would greatly appreciate any help. Please reply to my email address as well.

In any case, no matter what I've tried, I am getting an error. I've attached the WSDL file that was used to generate Java classes with WSDL2Java. Each of those complex types has a serializer/deserializer in the code, so I thought you could specify them as the serializer or deserializer in the type mapping.

I'm trying to just get one method of the web service working. I tried creating a test client, but it failed with a ClassNotFound trying to find org/apache/axis/Deserializer. I then realized I need to do typemapping since my parameters are not primitive types.

For example, look at GetOutstandingOrders type. I've tried setting my deploy.wsdd as follows:

<deployment
xmlns="http://xml.apache.org/axis/wsdd/";
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java";
xmlns:ns="urn:LibraryDemo\\srvcGeneral\\srvcdoc">
<service name="ElectronicMarketService" provider="java:EJB">
<parameter name="beanJndiName" value="ElectronicMarketServiceLocal"/>
<parameter name="homeInterfaceName" value="edu.uiuc.cs427.j2e3.service.ElectronicMarketServiceLocalHome"/>
<parameter name="remoteInterfaceName" value="edu.uiuc.cs427.j2e3.service.ElectronicMarketServiceLocal"/>
<parameter name="allowedMethods" value="*"/> <parameter name="jndiURL" value="jnp://localhost:1099"/>
<parameter name="jndiContextClass" value="org.jnp.interfaces.NamingContextFactory"/>
<wsdlFile>ElectronicMarket.wsdl</wsdlFile>
<!-- This type mapping I believe is causing the problem not allowing a client to connect -->
<!-- Can only get to complete target if type is set to "classname" -->
<!-- Serializer is not letting me put my class, deserializer is -->
<!--
<typeMapping
qname="ns:GetOutstandingOrders"
classname="java:edu.uiuc.cs427.soap.CollectionOfOrder"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="edu.uiuc.cs427.soap.CollectionOfOrder"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
-->
<beanMapping
qname="ns:GetOutstandingOrders"
xmlns:ns="urn:LibraryDemo\\srvcGeneral\\srvcdoc"
languageSpecificType="java:edu.uiuc.cs427.soap.CollectionOfOrder"/> </service>
</deployment>


I've tried several combinations of typeMapping and beanMapping yet none work. What I'd like to do is something like:
<typeMapping
qname="ns:GetOutstandingOrders"
classname="java:edu.uiuc.cs427.soap.CollectionOfOrder"
serializer="edu.uiuc.cs427.soap.CollectionOfOrder"
deserializer="edu.uiuc.cs427.soap.CollectionOfOrder"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>


However, I get a variety of errors depending on which attempt I make:

One error if I use the first typeMapping example with classname and with the BeanSerializerFactory serializer I get:

19:56:58,453 ERROR [WSDDDeployableItem] Unable to deploy typemapping: {urn:LibraryDemo\\srvcGeneral\\srvcdoc}GetOutstandingOrders
java.lang.ClassNotFoundException: Found languageSpecificType namespace '', expected 'http://xml.apache.org/axis/wsdd/providers/java'
at org.apache.axis.deployment.wsdd.WSDDTypeMapping.getLanguageSpecificType(WSDDTypeMapping.java:213)
at org.apache.axis.deployment.wsdd.WSDDService.deployTypeMapping(WSDDService.java:549)
at org.apache.axis.deployment.wsdd.WSDDService.initTMR(WSDDService.java:267)
at org.apache.axis.deployment.wsdd.WSDDService.<init>(WSDDService.java:247)
at org.apache.axis.deployment.wsdd.WSDDDeployment.<init>(WSDDDeployment.java:243)
at org.apache.axis.deployment.wsdd.WSDDDocument.<init>(WSDDDocument.java:118)


If I try one of the other combinations, I often get an InvocationTargetException when trying to execute the axis-admin Ant task.

If I try putting the java: in front of the serializer/deserializer, it gives me another error.

If anyone can see something obvious here, or can show me better documentation on this besides example 5 of the user guide, please help me out.

I've also attached the source code for the generated CollectionOfOrder type.

If you need any more info from me, let me know.

Thanks
<?xml version="1.0" encoding="utf-8" ?>
<definitions targetNamespace="urn:LibraryDemo\\srvcGeneral\\srvcdoc" xmlns="http://schemas.xmlsoap.org/wsdl/"; xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; xmlns:ns="urn:LibraryDemo\\srvcGeneral\\srvcdoc">
	<types>
		<schema targetNamespace="urn:LibraryDemo\\srvcGeneral\\srvcdoc" elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema"; xmlns:ns="urn:LibraryDemo\\srvcGeneral\\srvcdoc" xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
			<complexType name="CollectionOfOrder">
				<sequence>
					<element name="Order" minOccurs="0" maxOccurs="unbounded" type="ns:Order"/>
				</sequence>
			</complexType>
			<complexType name="Market">
				<sequence>
					<element name="settings" minOccurs="1" maxOccurs="1" type="ns:TradingSettings"/>
					<element name="segments" minOccurs="1" maxOccurs="1" type="ns:CollectionOfSegment"/>
				</sequence>
			</complexType>
			<complexType name="CollectionOfSegment">
				<sequence>
					<element name="Segment" minOccurs="0" maxOccurs="unbounded" type="ns:Segment"/>
				</sequence>
			</complexType>
			<complexType name="TradingSettings">
				<sequence>
					<element name="stateCycleSpec" minOccurs="0" maxOccurs="1" type="xsd:string"/>
					<element name="stopTradingRange" minOccurs="0" maxOccurs="1" type="xsd:double"/>
					<element name="priceIncrement" minOccurs="1" maxOccurs="1" type="xsd:double"/>
				</sequence>
			</complexType>
			<complexType name="Segment">
				<sequence>
					<element name="name" minOccurs="1" maxOccurs="1" type="xsd:string"/>
					<element name="settings" minOccurs="1" maxOccurs="1" type="ns:TradingSettings"/>
					<element name="securities" minOccurs="1" maxOccurs="1" type="ns:CollectionOfSecurity"/>
					<element name="market" minOccurs="1" maxOccurs="1" type="ns:Market"/>
				</sequence>
			</complexType>
			<complexType name="CollectionOfSecurity">
				<sequence>
					<element name="Security" minOccurs="0" maxOccurs="unbounded" type="ns:Security"/>
				</sequence>
			</complexType>
			<complexType name="Security">
				<sequence>
					<element name="name" minOccurs="1" maxOccurs="1" type="xsd:string"/>
					<element name="settings" minOccurs="1" maxOccurs="1" type="ns:TradingSettings"/>
					<element name="segment" minOccurs="1" maxOccurs="1" type="ns:Segment"/>
				</sequence>
			</complexType>
			<complexType name="OrderStatus">
				<sequence>
					<element name="matchingShares" minOccurs="1" maxOccurs="1" type="xsd:int"/>
					<element name="order" minOccurs="1" maxOccurs="1" type="ns:Order"/>
					<element name="matchingPrice" minOccurs="1" maxOccurs="1" type="xsd:double"/>
					<element name="identification" minOccurs="1" maxOccurs="1" type="xsd:string"/>
					<element name="matchingParty" minOccurs="1" maxOccurs="1" type="ns:Party"/>
					<element name="status" minOccurs="1" maxOccurs="1" type="xsd:string"/>
				</sequence>
			</complexType>
			<complexType name="Order">
				<sequence>
					<element name="numberOfShares" minOccurs="1" maxOccurs="1" type="xsd:int"/>
					<element name="nominalPrice" minOccurs="0" maxOccurs="1" type="xsd:double"/>
					<element name="party" minOccurs="1" maxOccurs="1" type="ns:Party"/>
					<element name="instrument" minOccurs="1" maxOccurs="1" type="xsd:string"/>
				</sequence>
			</complexType>
			<complexType name="Party">
				<sequence>
					<element name="name" minOccurs="1" maxOccurs="1" type="xsd:string"/>
					<element name="identification" minOccurs="1" maxOccurs="1" type="xsd:string"/>
				</sequence>
			</complexType>
			<element name="x_GetOutstandingOrders" type="ns:GetOutstandingOrders"/>
			<complexType name="GetOutstandingOrders">
				<sequence>
					<element name="PrderIdentification" minOccurs="1" maxOccurs="1" type="xsd:int"/>
				</sequence>
			</complexType>
			<element name="x_GetOutstandingOrdersResponse" type="ns:CollectionOfOrder"/>
			<element name="x_CreateMarket" type="ns:CreateMarket"/>
			<complexType name="CreateMarket">
				<sequence>
					<element name="Market" minOccurs="1" maxOccurs="1" type="ns:Market"/>
				</sequence>
			</complexType>
			<element name="x_CreateMarketResponse" type="xsd:boolean"/>
			<element name="x_GetOrderStatus" type="ns:GetOrderStatus"/>
			<complexType name="GetOrderStatus">
				<sequence>
					<element name="OrderIdentification" minOccurs="1" maxOccurs="1" type="xsd:int"/>
				</sequence>
			</complexType>
			<element name="x_GetOrderStatusResponse" type="ns:OrderStatus"/>
			<element name="x_AddSellOrder" type="ns:AddSellOrder"/>
			<complexType name="AddSellOrder">
				<sequence>
					<element name="Order" minOccurs="1" maxOccurs="1" type="ns:Order"/>
				</sequence>
			</complexType>
			<element name="x_AddSellOrderResponse" type="ns:OrderStatus"/>
			<element name="x_AddBuyOrder" type="ns:AddBuyOrder"/>
			<complexType name="AddBuyOrder">
				<sequence>
					<element name="Order" minOccurs="1" maxOccurs="1" type="ns:Order"/>
				</sequence>
			</complexType>
			<element name="x_AddBuyOrderResponse" type="ns:OrderStatus"/>
		</schema>
	</types>
	<message name="GetOutstandingOrders">
		<part name="parameter" element="ns:x_GetOutstandingOrders"/>
	</message>
	<message name="GetOutstandingOrdersResponse">
		<part name="return" element="ns:x_GetOutstandingOrdersResponse"/>
	</message>
	<message name="CreateMarket">
		<part name="parameter" element="ns:x_CreateMarket"/>
	</message>
	<message name="CreateMarketResponse">
		<part name="return" element="ns:x_CreateMarketResponse"/>
	</message>
	<message name="GetOrderStatus">
		<part name="parameter" element="ns:x_GetOrderStatus"/>
	</message>
	<message name="GetOrderStatusResponse">
		<part name="return" element="ns:x_GetOrderStatusResponse"/>
	</message>
	<message name="AddSellOrder">
		<part name="parameter" element="ns:x_AddSellOrder"/>
	</message>
	<message name="AddSellOrderResponse">
		<part name="return" element="ns:x_AddSellOrderResponse"/>
	</message>
	<message name="AddBuyOrder">
		<part name="parameter" element="ns:x_AddBuyOrder"/>
	</message>
	<message name="AddBuyOrderResponse">
		<part name="return" element="ns:x_AddBuyOrderResponse"/>
	</message>
	<portType name="ElectronicMarket">
		<operation name="GetOutstandingOrders">
			<documentation>It returns all the orders placed by a party that didn't match any other.</documentation>
			<input message="ns:GetOutstandingOrders"/>
			<output message="ns:GetOutstandingOrdersResponse"/>
		</operation>
		<operation name="CreateMarket">
			<documentation>It creates a market with segments, securities and parties</documentation>
			<input message="ns:CreateMarket"/>
			<output message="ns:CreateMarketResponse"/>
		</operation>
		<operation name="GetOrderStatus">
			<documentation>It returns the status of an order posted before</documentation>
			<input message="ns:GetOrderStatus"/>
			<output message="ns:GetOrderStatusResponse"/>
		</operation>
		<operation name="AddSellOrder">
			<documentation>It adds an order for selling the instrument spedified by anOrder</documentation>
			<input message="ns:AddSellOrder"/>
			<output message="ns:AddSellOrderResponse"/>
		</operation>
		<operation name="AddBuyOrder">
			<documentation>It adds an order for buying the instrument spedified by anOrder</documentation>
			<input message="ns:AddBuyOrder"/>
			<output message="ns:AddBuyOrderResponse"/>
		</operation>
	</portType>
	<binding name="ElectronicMarket" type="ns:ElectronicMarket">
		<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http/"/>
		<operation name="GetOutstandingOrders" selector="getOutstandingOrders:">
			<soap:operation soapAction=""/>
			<input>
				<soap:body use="literal" namespace="urn:LibraryDemo\\srvcGeneral\\srvcdoc"/>
			</input>
			<output>
				<soap:body use="literal" namespace="urn:LibraryDemo\\srvcGeneral\\srvcdoc"/>
			</output>
		</operation>
		<operation name="CreateMarket" selector="createMarket:">
			<soap:operation soapAction=""/>
			<input>
				<soap:body use="literal" namespace="urn:LibraryDemo\\srvcGeneral\\srvcdoc"/>
			</input>
			<output>
				<soap:body use="literal" namespace="urn:LibraryDemo\\srvcGeneral\\srvcdoc"/>
			</output>
		</operation>
		<operation name="GetOrderStatus" selector="getOrderStatus:">
			<soap:operation soapAction=""/>
			<input>
				<soap:body use="literal" namespace="urn:LibraryDemo\\srvcGeneral\\srvcdoc"/>
			</input>
			<output>
				<soap:body use="literal" namespace="urn:LibraryDemo\\srvcGeneral\\srvcdoc"/>
			</output>
		</operation>
		<operation name="AddSellOrder" selector="addSellOrder:">
			<soap:operation soapAction=""/>
			<input>
				<soap:body use="literal" namespace="urn:LibraryDemo\\srvcGeneral\\srvcdoc"/>
			</input>
			<output>
				<soap:body use="literal" namespace="urn:LibraryDemo\\srvcGeneral\\srvcdoc"/>
			</output>
		</operation>
		<operation name="AddBuyOrder" selector="addBuyOrder:">
			<soap:operation soapAction=""/>
			<input>
				<soap:body use="literal" namespace="urn:LibraryDemo\\srvcGeneral\\srvcdoc"/>
			</input>
			<output>
				<soap:body use="literal" namespace="urn:LibraryDemo\\srvcGeneral\\srvcdoc"/>
			</output>
		</operation>
	</binding>
</definitions>
/**
 * CollectionOfOrder.java
 *
 * This file was auto-generated from WSDL
 * by the Apache Axis WSDL2Java emitter.
 */

package edu.uiuc.cs427.soap;

public class CollectionOfOrder  implements java.io.Serializable {
    private edu.uiuc.cs427.soap.Order[] order;

    public CollectionOfOrder() {
    }

    public edu.uiuc.cs427.soap.Order[] getOrder() {
        return order;
    }

    public void setOrder(edu.uiuc.cs427.soap.Order[] order) {
        this.order = order;
    }

    public edu.uiuc.cs427.soap.Order getOrder(int i) {
        return order[i];
    }

    public void setOrder(int i, edu.uiuc.cs427.soap.Order value) {
        this.order[i] = value;
    }

    private java.lang.Object __equalsCalc = null;
    public synchronized boolean equals(java.lang.Object obj) {
        if (!(obj instanceof CollectionOfOrder)) return false;
        CollectionOfOrder other = (CollectionOfOrder) obj;
        if (obj == null) return false;
        if (this == obj) return true;
        if (__equalsCalc != null) {
            return (__equalsCalc == obj);
        }
        __equalsCalc = obj;
        boolean _equals;
        _equals = true && 
            ((this.order==null && other.getOrder()==null) || 
             (this.order!=null &&
              java.util.Arrays.equals(this.order, other.getOrder())));
        __equalsCalc = null;
        return _equals;
    }

    private boolean __hashCodeCalc = false;
    public synchronized int hashCode() {
        if (__hashCodeCalc) {
            return 0;
        }
        __hashCodeCalc = true;
        int _hashCode = 1;
        if (getOrder() != null) {
            for (int i=0;
                 i<java.lang.reflect.Array.getLength(getOrder());
                 i++) {
                java.lang.Object obj = java.lang.reflect.Array.get(getOrder(), i);
                if (obj != null &&
                    !obj.getClass().isArray()) {
                    _hashCode += obj.hashCode();
                }
            }
        }
        __hashCodeCalc = false;
        return _hashCode;
    }

    // Type metadata
    private static org.apache.axis.description.TypeDesc typeDesc =
        new org.apache.axis.description.TypeDesc(CollectionOfOrder.class);

    static {
        typeDesc.setXmlType(new 
javax.xml.namespace.QName("urn:LibraryDemo\\srvcGeneral\\srvcdoc", 
"CollectionOfOrder"));
        org.apache.axis.description.ElementDesc elemField = new 
org.apache.axis.description.ElementDesc();
        elemField.setFieldName("order");
        elemField.setXmlName(new 
javax.xml.namespace.QName("urn:LibraryDemo\\srvcGeneral\\srvcdoc", "Order"));
        elemField.setXmlType(new 
javax.xml.namespace.QName("urn:LibraryDemo\\srvcGeneral\\srvcdoc", "Order"));
        elemField.setMinOccurs(0);
        typeDesc.addFieldDesc(elemField);
    }

    /**
     * Return type metadata object
     */
    public static org.apache.axis.description.TypeDesc getTypeDesc() {
        return typeDesc;
    }

    /**
     * Get Custom Serializer
     */
    public static org.apache.axis.encoding.Serializer getSerializer(
           java.lang.String mechType, 
           java.lang.Class _javaType,  
           javax.xml.namespace.QName _xmlType) {
        return 
          new  org.apache.axis.encoding.ser.BeanSerializer(
            _javaType, _xmlType, typeDesc);
    }

    /**
     * Get Custom Deserializer
     */
    public static org.apache.axis.encoding.Deserializer getDeserializer(
           java.lang.String mechType, 
           java.lang.Class _javaType,  
           javax.xml.namespace.QName _xmlType) {
        return 
          new  org.apache.axis.encoding.ser.BeanDeserializer(
            _javaType, _xmlType, typeDesc);
    }

}

Reply via email to