Hi, I process the following .wsdl file with support for wrapped document/literal off.
After deployment, I write a dummy implementation of the SDI, and test my stub against the server. The *response* looks like this ; <?xml version="1.0" encoding="utf-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <GetResponse xmlns="http://www.webstep.no/schemas/"> <numberOfItemsInStore xmlns="">100</numberOfItemsInStore> <ItemAttributes xmlns=""> <partName>10300404</partName> <partLocation>Oslo</partLocation> <partDescription>CPU. P-120MHZ</partDescription> </ItemAttributes> </GetResponse> </soapenv:Body> Aa you can see, my abstract element "ItemAttributes" have no xsi:type attribute, and the BeanDeSerializer has no Idea what concreate implementation of this class to instantiate. Any Idea if I can "force" the "xsi:type" attribute, or any Idea why this is not included ? Im not sure if the problem is related, but when I take a look at the WSDL that axis generates for my service. My derived class is missing. - The Exception - Exception: org.xml.sax.SAXException: Invalid element in no.webstep.www.schemas.AbstractGetAttributeType - partName at org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer. java:258) at org.apache.axis.encoding.DeserializationContext.startElement(Deserialization Context.java:1035) at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165) at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java: 1141) at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236) at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384) at org.apache.axis.client.Call.invoke(Call.java:2448) at org.apache.axis.client.Call.invoke(Call.java:2347) at org.apache.axis.client.Call.invoke(Call.java:1804) at no.webstep.www.schemas.ItemStorageStub.get(ItemStorageStub.java:178) at TestAbstractNess.main(TestAbstractNess.java:27) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 ) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:25) at java.lang.reflect.Method.invoke(Method.java:324) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:78) - The test code that fails URL urlWsdl = new URL("http://localhost:8888/axis/abstracttest-alternate.wsdl"); String nameSpaceUri = "http://www.webstep.no/schemas/"; String serviceName = "AbstractTest"; ServiceFactory serviceFactory = ServiceFactory.newInstance(); Service service = serviceFactory.createService(urlWsdl, new QName(nameSpaceUri, serviceName)); ItemStorageStub stub = new ItemStorageStub(new URL("http://localhost:8888/axis/services/ItemStorage"), service) ; System.out.println(stub.get("010223232-S" ).getNumberOfItemsInStore()) ; - Sever side implementation public class ItemStorageImpl implements no.webstep.www.schemas.ItemStorage{ public no.webstep.www.schemas.GetResponse get(java.lang.String pk) throws java.rmi.RemoteException { return new GetResponse(10000, new GetResponseAttributes(new GetComputerPartItemResponse("CPU", "Oslo", "Central Processing Unit"))) ; } } - The generated class for my derived type /** * GetComputerPartItemResponse.java * * This file was auto-generated from WSDL * by the Apache Axis 1.2.1 Jun 14, 2005 (09:15:57 EDT) WSDL2Java emitter. */ package no.webstep.www.schemas; public class GetComputerPartItemResponse extends no.webstep.www.schemas.AbstractGetAttributeType implements java.io.Serializable { private java.lang.String partName; private java.lang.String partLocation; private java.lang.String partDescription; public GetComputerPartItemResponse() { } public GetComputerPartItemResponse( java.lang.String partName, java.lang.String partLocation, java.lang.String partDescription) { this.partName = partName; this.partLocation = partLocation; this.partDescription = partDescription; } /** * Gets the partName value for this GetComputerPartItemResponse. * * @return partName */ public java.lang.String getPartName() { return partName; } /** * Sets the partName value for this GetComputerPartItemResponse. * * @param partName */ public void setPartName(java.lang.String partName) { this.partName = partName; } /** * Gets the partLocation value for this GetComputerPartItemResponse. * * @return partLocation */ public java.lang.String getPartLocation() { return partLocation; } /** * Sets the partLocation value for this GetComputerPartItemResponse. * * @param partLocation */ public void setPartLocation(java.lang.String partLocation) { this.partLocation = partLocation; } /** * Gets the partDescription value for this GetComputerPartItemResponse. * * @return partDescription */ public java.lang.String getPartDescription() { return partDescription; } /** * Sets the partDescription value for this GetComputerPartItemResponse. * * @param partDescription */ public void setPartDescription(java.lang.String partDescription) { this.partDescription = partDescription; } private java.lang.Object __equalsCalc = null; public synchronized boolean equals(java.lang.Object obj) { if (!(obj instanceof GetComputerPartItemResponse)) return false; GetComputerPartItemResponse other = (GetComputerPartItemResponse) obj; if (obj == null) return false; if (this == obj) return true; if (__equalsCalc != null) { return (__equalsCalc == obj); } __equalsCalc = obj; boolean _equals; _equals = super.equals(obj) && ((this.partName==null && other.getPartName()==null) || (this.partName!=null && this.partName.equals(other.getPartName()))) && ((this.partLocation==null && other.getPartLocation()==null) || (this.partLocation!=null && this.partLocation.equals(other.getPartLocation()))) && ((this.partDescription==null && other.getPartDescription()==null) || (this.partDescription!=null && this.partDescription.equals(other.getPartDescription()))); __equalsCalc = null; return _equals; } private boolean __hashCodeCalc = false; public synchronized int hashCode() { if (__hashCodeCalc) { return 0; } __hashCodeCalc = true; int _hashCode = super.hashCode(); if (getPartName() != null) { _hashCode += getPartName().hashCode(); } if (getPartLocation() != null) { _hashCode += getPartLocation().hashCode(); } if (getPartDescription() != null) { _hashCode += getPartDescription().hashCode(); } __hashCodeCalc = false; return _hashCode; } // Type metadata private static org.apache.axis.description.TypeDesc typeDesc = new org.apache.axis.description.TypeDesc(GetComputerPartItemResponse.class, true); static { typeDesc.setXmlType(new javax.xml.namespace.QName("http://www.webstep.no/schemas/", ">GetComputerPartItemResponse")); org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc(); elemField.setFieldName("partName"); elemField.setXmlName(new javax.xml.namespace.QName("", "partName")); elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string")); elemField.setNillable(false); typeDesc.addFieldDesc(elemField); elemField = new org.apache.axis.description.ElementDesc(); elemField.setFieldName("partLocation"); elemField.setXmlName(new javax.xml.namespace.QName("", "partLocation")); elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string")); elemField.setNillable(false); typeDesc.addFieldDesc(elemField); elemField = new org.apache.axis.description.ElementDesc(); elemField.setFieldName("partDescription"); elemField.setXmlName(new javax.xml.namespace.QName("", "partDescription")); elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string")); elemField.setNillable(false); 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); } } - The Schema <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:webstep="http://www.webstep.no/schemas/" targetNamespace="http://www.webstep.no/schemas/"> <types> <xs:schema xmlns="http://www.webstep.no/schemas/" targetNamespace="http://www.webstep.no/schemas/" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- Abstract schema eleemnts --> <xs:element name="GetResponse"> <xs:complexType> <xs:sequence> <xs:element name="numberOfItemsInStore" type="xs:int"/> <xs:elemsent name="ItemAttributes" type="AbstractGetAttributeType" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="AbstractGetAttributeType" abstract="true"/> <!-- Concrete schema elements --> <xs:element name="GetComputerPartItemResponse"> <xs:complexType> <xs:complexContent> <xs:extension base="AbstractGetAttributeType" > <xs:sequence> <xs:element name="partName" type="xs:string"/> <xs:element name="partLocation" type="xs:string"/> <xs:element name="partDescription" type="xs:string"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> </xs:schema> </types> <message name="Request"> <part name="pk" type="xs:string"/> </message> <message name="Response"> <part name="result" element="webstep:GetResponse"/> </message> <portType name="ItemStorage"> <operation name="Get"> <input message="webstep:Request"/> <output message="webstep:Response"/> </operation> </portType> <binding name="ItemStorage" type="webstep:ItemStorage"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="Get"> <soap:operation soapAction="CAI3G#Get" style="document" /> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="AbstractTest"> <port name="ItemStorage" binding="webstep:ItemStorage"> <soap:address location="http://anyema.anyprovisioningprovider.com/cai3g"/> </port> </service> </definitions> Glenn Richard Bech Seniorkonsulent Mob: 99356459 Tel: 40003325 Lysaker torg 2, 1366 Lysaker http://www.webstep.no Bergen - Oslo - Stavanger -----Original Message----- From: Clement Lyons [mailto:[EMAIL PROTECTED] Sent: 5. oktober 2005 04:46 To: [email protected] Subject: Configure Axis WS client to use HTTP/1.1 Hi I'am relatively new to Axis. I need to configure my axis Client to use HTTP/1.1 instead of HTTP/1.0. I've searched this List and the Web but cannot find any description on how to do this. Can anyone point me in the correct direction here ? Thanks Clement
