Skip to Main Content

Java EE (Java Enterprise Edition) General Discussion

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Deserializer error : could not find deserializer for type

843833Jun 9 2008 — edited Jan 25 2010
Hi folks,

I am trying to send a XML file in web service request and trying to get the same back, I am getting the following exception while trying to do this,
org.xml.sax.SAXException: Deserializing parameter 'echo':  could not find deserializer for type {Echo}echo
AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: org.xml.sax.SAXException: Deserializing parameter 'echo':  could not find deserializer for type {Echo}echo
 faultActor: 
 faultNode: 
 faultDetail: 
	{http://xml.apache.org/axis/}hostname:localhost

org.xml.sax.SAXException: Deserializing parameter 'echo':  could not find deserializer for type {Echo}echo
	at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
	at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
	at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
	at javax.xml.parsers.SAXParser.parse(Unknown Source)
	at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
	at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
	at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
	at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
	at org.apache.axis.client.Call.invoke(Call.java:2767)
	at org.apache.axis.client.Call.invoke(Call.java:2443)
	at org.apache.axis.client.Call.invoke(Call.java:2366)
	at org.apache.axis.client.Call.invoke(Call.java:1812)
	at com.sel.services.EchoRequest.main(EchoRequest.java:42)
 
The following is my client code,
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory;
import org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory;






public class EchoRequest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		
		try {
				String endpoint = "http://localhost:8080/axis/Echo.jws";
				Service  service = new Service();
		        Call     call    = (Call) service.createCall();
		  
		        call.setTargetEndpointAddress( new java.net.URL(endpoint) );
		        call.setOperationName(new QName(("Echo"),"DataHandler"));
		        QName qName = new QName("Echo" , "echo");
		        DataHandler dhSource = new DataHandler(new FileDataSource("D:/Workspace/Sandbox/Request.xml"));
		        
		        call.registerTypeMapping(dhSource.getClass(),qName,JAFDataHandlerSerializerFactory.class,JAFDataHandlerDeserializerFactory.class );
		        
		        call.addParameter("echo", qName , ParameterMode.IN);
		        call.setProperty(call.ATTACHMENT_ENCAPSULATION_FORMAT, call.ATTACHMENT_ENCAPSULATION_FORMAT_MIME);
		        call.setReturnType(qName);		        
		        
		        Object ret = call.invoke(new Object[] {dhSource});
				
				
				System.out.println();
		        
		      } catch (Exception e) {
		        System.err.println(e.toString());
		        e.printStackTrace();
		      }
		    }

	}
The following is my jws,
import java.io.Serializable;
import javax.activation.DataHandler;

public class Echo implements Serializable{
	
	public DataHandler echo(DataHandler echo){
		return echo;
	}
}
The following is my deploy.wsdd,
<deployment	xmlns="http://xml.apache.org/axis/wsdd/" 
			   	xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" 
			   	xmlns:ns1="Echo">

	<service name="Echo" provider="java:RPC">
   		<parameter name="className" value="Echo"/>
	    
		<parameter name="allowedMethods" value="echo"/>
		
		<operation name="echoString" returnQName="returnqName" returnType="ns1:DataHandler">
       		<parameter name="echo" type="ns1:DataHandler"/>
	    </operation>
		
		<typeMapping deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory"
 			languageSpecificType="java:javax.activation.DataHandler" qname="ns1:DataHandler"
   			serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory" 
	    	encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
  	</service>
	
</deployment>
And following is my server-config.wsdd,
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
 <globalConfiguration>
  <parameter name="sendMultiRefs" value="true"/>
  <parameter name="disablePrettyXML" value="true"/>
  <parameter name="adminPassword" value="admin"/>
  <parameter name="attachments.Directory" value="D:\ApacheTomcat5.5.26\webapps\axis\WEB-INF\attachments"/>
  <parameter name="dotNetSoapEncFix" value="true"/>
  <parameter name="enableNamespacePrefixOptimization" value="false"/>
  <parameter name="sendXMLDeclaration" value="true"/>
  <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
  <parameter name="sendXsiTypes" value="true"/>
  <requestFlow>
   <handler type="java:org.apache.axis.handlers.JWSHandler">
    <parameter name="scope" value="session"/>
   </handler>
   <handler type="java:org.apache.axis.handlers.JWSHandler">
    <parameter name="scope" value="request"/>
    <parameter name="extension" value=".jwr"/>
   </handler>
  </requestFlow>
 </globalConfiguration>
 <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
 <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
 <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
 <service name="AdminService" provider="java:MSG">
  <parameter name="allowedMethods" value="AdminService"/>
  <parameter name="enableRemoteAdmin" value="false"/>
  <parameter name="className" value="org.apache.axis.utils.Admin"/>
  <namespace>http://xml.apache.org/axis/wsdd/</namespace>
 </service>
 <service name="Version" provider="java:RPC">
  <parameter name="allowedMethods" value="getVersion"/>
  <parameter name="className" value="org.apache.axis.Version"/>
 </service>
 <service name="Echo" provider="java:RPC">
  <operation name="echoString" returnQName="returnqName" returnType="ns1:DataHandler" soapAction="" xmlns:ns1="Echo">
   <parameter name="echo" type="ns1:DataHandler"/>
  </operation>
  <parameter name="allowedMethods" value="echo"/>
  <parameter name="className" value="Echo"/>
  <typeMapping deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" qname="ns2:DataHandler" serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory" type="java:javax.activation.DataHandler" xmlns:ns2="Echo"/>
 </service>
 <transport name="http">
  <requestFlow>
   <handler type="URLMapper"/>
   <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
  </requestFlow>
  <parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>
  <parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
  <parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler"/>
  <parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/>
  <parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
  <parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
 </transport>
 <transport name="local">
  <responseFlow>
   <handler type="LocalResponder"/>
  </responseFlow>
 </transport>
</deployment>
The following is the directory structure which I have in my tomcat for this service

- axis
-----WEB-INF
----------classes
----------jwsClasses
----------lib
----------deploy.wsdd
----------server-config.wsdd

I am really not sure where I am getting wrong. Please help me with this.

Thanks

Edited by: Jadaaih on Jun 19, 2008 1:52 AM
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Feb 22 2010
Added on Jun 9 2008
2 comments
1,784 views