|
All,
I created a web service, jarred it and deployed it
through use of deploy.wsdd.
Everything worked fine and it shows up under Axis
as a deployed web service (through
the web, and the WSDL is visible).
The problem comes in when trying to run a client to
the service.
The client compiles and essentially works, however,
depending on which method I call within the web service, I get
a bunch of errors. For example, my web
service has the following methods available:
public ProductTree
getProductTree()
public Product searchProductList(String gName, String bName) public void refreshProducts()
public void populateTree()
Note that only the two methods which return objects
of my defined classes (Product and ProductTree) give me errors when called
from the client.
The exact errors are:
1. This error is created when I try to call
the searchProductList() function:
[root@mdf161 gws2]# java
groceryWebService1.GroceryWebServiceClient
AxisFault faultCode: {http://xml.apache.org/axis/}Server.userException faultString: java.lang.reflect.InvocationTargetException faultActor: null faultDetail: stackTrace: java.lang.reflect.InvocationTargetException 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 org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:372) at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:292) at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:276) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:71) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:156) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:126) at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:437) at org.apache.axis.server.AxisServer.invoke(AxisServer.java:316) at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:701) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:335) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2396) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:405) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:380) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:508) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:533) at java.lang.Thread.run(Thread.java:536) Caused by: java.lang.StackOverflowError at groceryWebService1.ws.Gws1SoapBindingImpl.searchProductList(Gws1SoapBindingImpl.java:24) <****NOTE: THE ABOVE LINE IS REPEATED 1023 times****> java.lang.reflect.InvocationTargetException at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:135) at org.apache.axis.encoding.DeserializationContextImpl.endElement(DeserializationContextImpl.java:942) at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1528) at org.apache.crimson.parser.Parser2.content(Parser2.java:1779) at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1507) at org.apache.crimson.parser.Parser2.content(Parser2.java:1779) at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1507) at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:500) at org.apache.crimson.parser.Parser2.parse(Parser2.java:305) at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442) at javax.xml.parsers.SAXParser.parse(SAXParser.java:345) at org.apache.axis.encoding.DeserializationContextImpl.parse(DeserializationContextImpl.java:232) at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:546) at org.apache.axis.Message.getSOAPEnvelope(Message.java:377) at org.apache.axis.client.Call.invokeEngine(Call.java:2132) at org.apache.axis.client.Call.invoke(Call.java:2102) at org.apache.axis.client.Call.invoke(Call.java:1851) at org.apache.axis.client.Call.invoke(Call.java:1777) at org.apache.axis.client.Call.invoke(Call.java:1315) at groceryWebService1.ws.Gws1SoapBindingStub.searchProductList(Gws1SoapBindingStub.java:160) at groceryWebService1.GroceryWebServiceClient.main(GroceryWebServiceClient.java:19) 2. The second error is exactly the same thing
with a few line changes and the different method call
(getProductTree()).
The only thing I could think that may be going
wrong is the fact that Axis does not know how to serialize/deserialize my
classes, Product and ProductTree.
The reason for this is because when I call a
function like 'refreshProducts()' that does not need to return anything, I do
not get back any faults/exceptions.
I read on the web that in deploy.wsdd (generated by
Axis) is where you may have to specify extra serialization stuff. My file
seems to contain type mappings for my classes, well actually
it only contains type mappings for those
classes used. For example, it has the following lines:
<typeMapping
xmlns:ns="urn:gws1" qname="ns:ProductTree" type="java:groceryWebService1.ws.ProductTree" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> <typeMapping xmlns:ns="urn:gws1" qname="ns:Node" type="java:groceryWebService1.ws.Node" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> <typeMapping xmlns:ns="urn:gws1" qname="ns:Product" type="java:groceryWebService1.ws.Product" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> But my service also depends on classes such as
Category, which is also of type Node, but I never return it anywhere so I guess
that's why it doesn't need to know how to serialize/deserialize it,
correct?
Finally, what the heck is going on? How can I
get this to work? I feel so close. I've searched for this fault
/exception on the web with no avail ..
Any help is greatly appreciated.
Thanks,
M. Fecina
|
