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