You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by Afkham Azeez <af...@gmail.com> on 2008/01/24 15:29:28 UTC

Re: Axis2 Webservices error : Caused by: java.lang.InstantiationException: java.io.FileInputStream

You are populating an InputStream Object on the client side and passing it
to the service. While deserializing the POJO, Axis2 tries to instantiate the
InputStream, which cannot be done because InputStream in an abstract class.
You will have to change your code to make it work properly.

Azeez

On Jan 23, 2008 9:05 PM, reddy, ramachandra <ra...@anacomp.com>
wrote:

>  Hi All,
> I am a newbie to webservices. I have a webservice that I am implementing .
> I need to send
> XMLString and and a file stream.
>
> I tried this version where I sent xmlstring annd filestream as OMElements
> it worked.
> public OMElement service(OMElement element) throws AxisFault
> {
> //Get XML Request
> OMText genericRequestXMLText =
> (OMText)element.getFirstElement().getFirstOMChild();
> String genericRequestXML = genericRequestXMLText.getText();
> //Get input stream
> OMText binaryNode =
> (OMText)((OMElementImpl)element.getFirstElement().getNextOMSibling()).getFirstOMChild();
> DataHandler actualDH = (DataHandler) binaryNode.getDataHandler();
> actualDH.getInputStream();
>  ///Do my processing
>   //This works fine.
> }
>
> Now I want to expose on more method with DTO being passed like this
> *
>
> public
> * SAILTransferObject pojoService(SAILTransferObject request ) *throws*AxisFault
>
> {
>
>         String xmlPayload =  request.getXMLMessage();
>
>      InputStream ipStream =  request.getDocStream();
>
>          // Rest of processing
>
>
>
>
>
>     //Response to be sent
>
>      SAILTransferObject  response  =  new SAILTransferObject ();
>
>       ///populate response.......
>
>     return response;
>
> }
>
> //Here is DTO description
>
> public class *SAILTransferObject* implements ISAILObject {
>
>  private String xmlMessage = null;
>  private InputStream docStream = null;
>  public InputStream getDocStream() {
>   return this.docStream;
>  }
>  public String getXMLMessage() {
>   return this.xmlMessage;
>  }
>  public void setXMLMessage(String xmlMessage) {
>   this.xmlMessage = xmlMessage;
>  }
>  public void setDocStream(InputStream docStream) {
>   this.docStream = docStream;
>  }
>  public SAILTransferObject() {
>   super();
>  }
> }
> //My interface.
> Interface ISAILObject extends Serializable{
>     public String getXMLMessage() ;
>    public InputStream getDocStream() ;
> }
>
> *//SERVICE.XML*
> <service name="SAILWebService" scope="application">
>     <description>
>         SAIL WEB SERVICE
>     </description>
>
>  <!-- -->
>  <operation name="service">
>         <messageReceiver class="
> org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
>   <parameter name="enableMTOM" locked="false">true</parameter>
>     </operation>
>
>  <operation name="pojoService">
>     <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
>         class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
>     <parameter name="enableMTOM" locked="false">true</parameter>
>     </operation>
>
>     <parameter name="ServiceClass">
>     com.company.sail.webservices.SAILWebService</parameter>
> </service>
> *//My client Program *
> public static  void  callPojoBasedSAILService() throws Exception{
>   System.out.println(":: callPojoBasedSAILService");
>
>   RPCServiceClient serviceClient = new RPCServiceClient();
>   Options options = serviceClient.getOptions();
>   options.setTo(targetEPR);
>   options.setProperty(Constants.Configuration.ENABLE_MTOM,
> Constants.VALUE_TRUE);
>   QName method = new QName("http://webservices.sail.docharbor.com",
> "pojoService");
>   DataHandler dataHandler = new DataHandler(new
> FileDataSource("C:\\Resume.doc"));
>   ISAILObject sailTransferDto = new SAILTransferObject("<test>This will be
> a xml String</test>",dataHandler.getInputStream());
>   Object[] inputArgs = new Object[] { sailTransferDto };
>         //Class[] returnTypes = new Class[] { SAILTransferObject.class };
>         Class<?>[] returnTypes = new Class[] { SAILTransferObject.class };
>         try{
>          Object[] response = serviceClient.invokeBlocking(method,
> inputArgs, returnTypes);
>          ISAILObject result = (ISAILObject) response[0];
>
>    if(result== null){
>     System.out.println("Result was nulll");
>    }
>    else{
>     System.out.println("result :" + result.getXMLMessage());
>     System.out.println("result :" + result.getDocStream());
>    }
>         }
>         catch(AxisFault e){
>          System.out.println(""+e.toString());
>          System.out.println("\n FaultAction:"+e.getFaultAction());
>          System.out.println("\n Node:"+e.getFaultNode());
>          System.out.println("\n Reason:"+e.getReason());
>         }
>  }
>
> *ERROR  Message :*
> *[ERROR] Exception occurred while trying to invoke service method
> pojoService
> org.apache.axis2.AxisFault: java.io.FileInputStream
> * at org.apache.axis2.AxisFault.makeFault(AxisFault.java:417)
>  at org.apache.axis2.engine.DefaultObjectSupplier.getObject(
> DefaultObjectSupplier.java:29)
>  at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java
> :345)
>  at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java
> :385)
>  at org.apache.axis2.databinding.utils.BeanUtil.processObject(
> BeanUtil.java:655)
>  at org.apache.axis2.databinding.utils.BeanUtil.ProcessElement(
> BeanUtil.java:603)
>  at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java
> :535)
>  at org.apache.axis2.rpc.receivers.RPCUtil.processRequest(RPCUtil.java
> :153)
>  at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java
> :188)
>  at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(
> RPCMessageReceiver.java:98)
>  at
> org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic
> (AbstractInOutMessageReceiver.java:40)
>  at org.apache.axis2.receivers.AbstractMessageReceiver.receive(
> AbstractMessageReceiver.java:96)
>  at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:145)
>  at
> org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(
> HTTPTransportUtils.java:275)
>  at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java
> :120)
>  at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
>  at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
>  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:237)
>  at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:157)
>  at org.apache.catalina.core.StandardWrapperValve.invoke(
> StandardWrapperValve.java:214)
>  at org.apache.catalina.core.StandardValveContext.invokeNext(
> StandardValveContext.java:104)
>  at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
> :520)
>  at org.apache.catalina.core.StandardContextValve.invokeInternal(
> StandardContextValve.java:198)
>  at org.apache.catalina.core.StandardContextValve.invoke(
> StandardContextValve.java:152)
>  at org.apache.catalina.core.StandardValveContext.invokeNext(
> StandardValveContext.java:104)
>  at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
> :520)
>  at org.apache.catalina.core.StandardHostValve.invoke(
> StandardHostValve.java:137)
>  at org.apache.catalina.core.StandardValveContext.invokeNext(
> StandardValveContext.java:104)
>  at org.apache.catalina.valves.ErrorReportValve.invoke(
> ErrorReportValve.java:117)
>  at org.apache.catalina.core.StandardValveContext.invokeNext(
> StandardValveContext.java:102)
>  at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
> :520)
>  at org.apache.catalina.core.StandardEngineValve.invoke(
> StandardEngineValve.java:109)
>  at org.apache.catalina.core.StandardValveContext.invokeNext(
> StandardValveContext.java:104)
>  at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java
> :535)
>  at org.apache.catalina.core.StandardValveContext.invokeNext(
> StandardValveContext.java:102)
>  at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
> :520)
>  at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
>  at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java
> :160)
>  at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
> :790)
>  at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection
> (Http11Protocol.java:709)
>  at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java
> :572)
>  at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(
> ThreadPool.java:644)
>  at java.lang.Thread.run(Thread.java:619)
> *Caused by: java.lang.InstantiationException: java.io.FileInputStream
>  at java.lang.Class.newInstance0(Class.java:340)
>  at java.lang.Class.newInstance(Class.java:308)
> * at org.apache.axis2.engine.DefaultObjectSupplier.getObject(
> DefaultObjectSupplier.java:27)
>  ... 41 more
>
>
> If anyone has faced similar problem and have workaround please let me
> know.Thanks in advance.
>
> Thanks
> Ramachandra
>
>



-- 
Thanks
Afkham Azeez

http://azeez78.blogspot.com
http://www.wso2.org
GPG Fingerprint: 643F C2AF EB78 F886 40C9  B2A2 4AE2 C887 665E 0760

RE: Axis2 Webservices error : Caused by: java.lang.InstantiationException: java.io.FileInputStream

Posted by "reddy, ramachandra" <ra...@anacomp.com>.
Hi Azeez,
Thanks. So I better go with fileinputstream. Thanks.

________________________________

From: Afkham Azeez [mailto:afkham@gmail.com] 
Sent: Thursday, January 24, 2008 9:29 AM
To: axis-dev@ws.apache.org
Subject: Re: Axis2 Webservices error : Caused by:
java.lang.InstantiationException: java.io.FileInputStream


You are populating an InputStream Object on the client side and passing
it to the service. While deserializing the POJO, Axis2 tries to
instantiate the InputStream, which cannot be done because InputStream in
an abstract class. You will have to change your code to make it work
properly.

Azeez


On Jan 23, 2008 9:05 PM, reddy, ramachandra
<ra...@anacomp.com> wrote:


	Hi All,
	I am a newbie to webservices. I have a webservice that I am
implementing . I need to send 
	XMLString and and a file stream.
	 
	I tried this version where I sent xmlstring annd filestream as
OMElements it worked.
	public OMElement service(OMElement element) throws AxisFault
	{
	//Get XML Request
	OMText genericRequestXMLText =
(OMText)element.getFirstElement().getFirstOMChild();
	String genericRequestXML = genericRequestXMLText.getText();
	//Get input stream
	OMText binaryNode =
(OMText)((OMElementImpl)element.getFirstElement().getNextOMSibling()).ge
tFirstOMChild();
	DataHandler actualDH = (DataHandler)
binaryNode.getDataHandler();
	actualDH.getInputStream(); 
	 ///Do my processing 
	  //This works fine.
	}
	
	 
	Now I want to expose on more method with DTO being passed like
this
	public

	SAILTransferObject pojoService(SAILTransferObject request )
throws AxisFault 

	{

	        String xmlPayload =  request.getXMLMessage();

	     InputStream ipStream =  request.getDocStream();

	         // Rest of processing 

	 

	 

	    //Response to be sent 

	     SAILTransferObject  response  =  new SAILTransferObject ();

	      ///populate response.......

	    return response;

	}

	//Here is DTO description 

	public class SAILTransferObject implements ISAILObject {

	 private String xmlMessage = null;
	 private InputStream docStream = null;
	 public InputStream getDocStream() {
	  return this.docStream;
	 }
	 public String getXMLMessage() {
	  return this.xmlMessage;
	 }
	 public void setXMLMessage(String xmlMessage) {
	  this.xmlMessage = xmlMessage;
	 }
	 public void setDocStream(InputStream docStream) {
	  this.docStream = docStream;
	 }
	 public SAILTransferObject() {
	  super();
	 }
	}

	//My interface.
	Interface ISAILObject extends Serializable{
	    public String getXMLMessage() ;
	   public InputStream getDocStream() ;
	}
	 
	//SERVICE.XML
	<service name="SAILWebService" scope="application">
	    <description>
	        SAIL WEB SERVICE
	    </description>
	 
	 <!-- -->
	 <operation name="service">
	        <messageReceiver
class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
	  <parameter name="enableMTOM" locked="false">true</parameter>
	    </operation>
	 
	 <operation name="pojoService">
	    <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
	
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
	    <parameter name="enableMTOM" locked="false">true</parameter>
	    </operation>
	 
	    <parameter name="ServiceClass">
	    com.company.sail.webservices.SAILWebService</parameter>
	</service>
	
	//My client Program 
	public static  void  callPojoBasedSAILService() throws
Exception{
	  System.out.println(":: callPojoBasedSAILService");
	  
	  RPCServiceClient serviceClient = new RPCServiceClient();
	  Options options = serviceClient.getOptions();
	  options.setTo(targetEPR);
	  options.setProperty(Constants.Configuration.ENABLE_MTOM,
Constants.VALUE_TRUE);
	  QName method = new
QName("http://webservices.sail.docharbor.com", "pojoService");
	  DataHandler dataHandler = new DataHandler(new
FileDataSource("C:\\Resume.doc"));
	  ISAILObject sailTransferDto = new
SAILTransferObject("<test>This will be a xml
String</test>",dataHandler.getInputStream());
	  Object[] inputArgs = new Object[] { sailTransferDto }; 
	        //Class[] returnTypes = new Class[] {
SAILTransferObject.class };
	        Class<?>[] returnTypes = new Class[] {
SAILTransferObject.class };
	        try{
	         Object[] response =
serviceClient.invokeBlocking(method, inputArgs, returnTypes);
	         ISAILObject result = (ISAILObject) response[0];
	         
	   if(result== null){
	    System.out.println("Result was nulll");
	   }
	   else{
	    System.out.println("result :" + result.getXMLMessage());
	    System.out.println("result :" + result.getDocStream());
	   } 
	        }
	        catch(AxisFault e){
	         System.out.println(""+e.toString());
	         System.out.println("\n
FaultAction:"+e.getFaultAction());
	         System.out.println("\n Node:"+e.getFaultNode());
	         System.out.println("\n Reason:"+e.getReason());
	        }
	 }
	
	 
	ERROR  Message :
	[ERROR] Exception occurred while trying to invoke service method
pojoService
	org.apache.axis2.AxisFault: java.io.FileInputStream
	 at org.apache.axis2.AxisFault.makeFault(AxisFault.java:417)
	 at
org.apache.axis2.engine.DefaultObjectSupplier.getObject(DefaultObjectSup
plier.java:29)
	 at
org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:34
5)
	 at
org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:38
5)
	 at
org.apache.axis2.databinding.utils.BeanUtil.processObject(BeanUtil.java:
655)
	 at
org.apache.axis2.databinding.utils.BeanUtil.ProcessElement(BeanUtil.java
:603)
	 at
org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:53
5)
	 at
org.apache.axis2.rpc.receivers.RPCUtil.processRequest(RPCUtil.java:153)
	 at
org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:1
88)
	 at
org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RP
CMessageReceiver.java:98)
	 at
org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLo
gic(AbstractInOutMessageReceiver.java:40)
	 at
org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessa
geReceiver.java:96)
	 at
org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:145)
	 at
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostReques
t(HTTPTransportUtils.java:275)
	 at
org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:120)
	 at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
	 at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
	 at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:237)
	 at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:157)
	 at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
e.java:214)
	 at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:104)
	 at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
20)
	 at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardCon
textValve.java:198)
	 at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
e.java:152)
	 at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:104)
	 at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
20)
	 at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:137)
	 at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:104)
	 at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
:117)
	 at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:102)
	 at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
20)
	 at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:109)
	 at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:104)
	 at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:535
)
	 at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:102)
	 at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
20)
	 at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
	 at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
	 at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:79
0)
	 at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processC
onnection(Http11Protocol.java:709)
	 at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:57
2)
	 at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool
.java:644)
	 at java.lang.Thread.run(Thread.java:619)
	Caused by: java.lang.InstantiationException:
java.io.FileInputStream
	 at java.lang.Class.newInstance0(Class.java:340)
	 at java.lang.Class.newInstance(Class.java:308)
	 at
org.apache.axis2.engine.DefaultObjectSupplier.getObject(DefaultObjectSup
plier.java:27)
	 ... 41 more
	
	 
	 
	If anyone has faced similar problem and have workaround please
let me know.Thanks in advance.
	 
	Thanks
	Ramachandra
	 




-- 
Thanks
Afkham Azeez

http://azeez78.blogspot.com
http://www.wso2.org
GPG Fingerprint: 643F C2AF EB78 F886 40C9  B2A2 4AE2 C887 665E 0760