DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9826>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9826 Doc message's operation not identified Summary: Doc message's operation not identified Product: Axis Version: beta-2 Platform: PC OS/Version: Windows NT/2K Status: NEW Severity: Normal Priority: Other Component: Basic Architecture AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] I showed this problem to Glen Daniels and he knows what fix is needed. The error can be reproduced with the following JUnit test acting as the client: package xp2002.exercise.webservices.test; import java.util.Vector; import junit.framework.TestCase; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.message.SOAPBodyElement; import org.apache.axis.utils.XMLUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; public class ForecastWebServiceTest extends TestCase { public ForecastWebServiceTest(String name) { super(name); } public static void main(String[] args) { junit.awtui.TestRunner.run(ForecastWebServiceTest.class); } public void testGetForecast() throws Exception { Element cityXML = XMLUtils.StringToElement ("http://xp2002.exercise.forecast", "CITY", "Apex"); SOAPBodyElement forecastXML = callGetForecast(cityXML); assertNotNull( "forecastResult", forecastXML.getAsDOM().getElementsByTagName ("ForecastResult")); NodeList itemList = forecastXML.getAsDOM().getElementsByTagName ("CITY"); Node item = itemList.item(0); assertTrue("forecastResult", "Apex".equals(item.getFirstChild ().toString())); } public SOAPBodyElement callGetForecast(Element cityXML) throws Exception { String endpoint = "http://localhost:8080/axis/services/ForecastService"; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(endpoint)); SOAPBodyElement[] input = new SOAPBodyElement[1]; SOAPBodyElement soap = new SOAPBodyElement(cityXML); input[0] = soap; Vector elems = (Vector) call.invoke(input); return (SOAPBodyElement) elems.elementAt(0); } } To a service implemented by the following bean (with code removed) package xp2002.exercise.forecast.service; import org.w3c.dom.Document; public class Forecaster { private ForecastTable forecasts = new ForecastTable(); public Forecaster() { super(); } public Document getForecast(Document cityDoc){ //simplified code to just return back the document recieved return cityDoc; } } The deploy.wsdd file is <deployment name="test" xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"> <service name="ForecastService" provider="java:MSG"> <parameter name="className" value="xp2002.exercise.forecast.service.Forecaster" /> <parameter name="allowedMethods" value="getForecast" /> </service> </deployment> The service on the wire is: POST /axis/services/ForecastService HTTP/1.0 Content-Length: 340 Host: localhost Content-Type: text/xml; charset=utf-8 SOAPAction: "" <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Body><ns1:CITY xmlns:ns1="http://xp2002.exercise.forecast">Apex</ns1:CITY> </SOAP-ENV:Body> </SOAP-ENV:Envelope> The error being generated on the server side is: java.lang.NullPointerException at org.apache.axis.AxisFault.makeFault(AxisFault.java:116) at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:433) at org.apache.axis.Message.getSOAPEnvelope(Message.java:306) at org.apache.axis.handlers.soap.SOAPService$SOAPRequestHandler.invoke (SOAPService.java:138) at org.apache.axis.strategies.InvocationStrategy.visit (InvocationStrategy.java:71) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:154) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:121) at org.apache.axis.server.AxisServer.invoke(AxisServer.java:288) at org.apache.axis.transport.http.AxisServlet.doPost (AxisServlet.java:576) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) 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:243) at org.apache.catalina.core.StandardPipeline.invokeNext (StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:190) at org.apache.catalina.core.StandardPipeline.invokeNext (StandardPipeline.java:566) at org.apache.catalina.valves.CertificatesValve.invoke (CertificatesValve.java:246) at org.apache.catalina.core.StandardPipeline.invokeNext (StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContext.invoke (StandardContext.java:2343) at org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:180) at org.apache.catalina.core.StandardPipeline.invokeNext (StandardPipeline.java:566) at org.apache.catalina.valves.ErrorDispatcherValve.invoke (ErrorDispatcherValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext (StandardPipeline.java:564) at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext (StandardPipeline.java:564) at org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:468) at org.apache.catalina.core.StandardPipeline.invokeNext (StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:174) at org.apache.catalina.core.StandardPipeline.invokeNext (StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.connector.http.HttpProcessor.process (HttpProcessor.java:1012) at org.apache.catalina.connector.http.HttpProcessor.run (HttpProcessor.java:1107) at java.lang.Thread.run(Thread.java:536) Caused by: java.lang.NullPointerException at org.apache.axis.message.BodyBuilder.onStartChild (BodyBuilder.java:134) at org.apache.axis.encoding.DeserializationContextImpl.startElement (DeserializationContextImpl.java:831) at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1488) 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:202) at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:428) ... 39 more I believe the problem is in the following code in BodyBuilder.onStartChild when it is trying to identify whether the element being analyzed is a non-Root element or a non-RPC service. } else if (!gotRPCElement) { if (isRoot && (operations == null || (operations[0].getStyle() != ServiceDesc.STYLE_MESSAGE))) { gotRPCElement = true; element = new RPCElement(namespace, localName, prefix, attributes, context, operations); Inspecting the variables as this code is walked through shows that the operations are null which causes the �if� to be true and calls the new RPCElement(..) which then errors out. Running the samples.message example also causes the new RPCElement to be executed, but does not cause the fault to occur. I don't know what difference between the 2 tests is causing the sample to pass and mine to fall.
