Hi Martin,
Thanks for the immediate reply. I am not sure I am following you, but I do have servicePath set in axis2.xml ( as mentioned below). But I have not set contextRoot. It looks like Axis2 is getting 'urn:testWS' from the HTTP SoapAction header, which in turn is coming from '<soap:operation soapAction=...' clause in the WSDL. We create the WSDL ourselves and we set the binding as '<soap:operation soapAction="urn:testWS">. What confuses me is that if I set 'servicePath' to "services" then I get the error : "- Unable to parse request URL [urn:testWS][/arsys/services]". However, when I set 'servicePath' to "arsys/services'", then I get the error: - Unable to parse request URL [http://vedanta:8080/arsys/services/ARService][/arsys/arsys/services] - Unable to parse request URL [http://vedanta:8080/arsys/services/ARService][/arsys/arsys/services] - Unable to parse request URL [http://vedanta:8080/arsys/services/ARService][/arsys/arsys/services] - Unable to parse request URL [urn:testWS][/arsys/arsys/services] And '/arsys' gets prepended to servicePath. Again, thanks for any help, --kumar ________________________________ From: Martin Gainty [mailto:[EMAIL PROTECTED] Sent: Wednesday, November 15, 2000 5:32 PM To: [email protected] Subject: Re: Dynamic web services SoapAction is *usually* prefaced with urn: as seen here operation.setSoapAction("urn:" + opName); so servicePath is incorrect is there a specific reason why you have'nt specified services as the servicePath in /conf/axis2.xml? <parameter name="servicePath">services</parameter>--> M-- ----- Original Message ----- From: Iyengar, Kumar <mailto:[EMAIL PROTECTED]> To: [email protected] Sent: Thursday, November 15, 2007 8:19 PM Subject: RE: Dynamic web services Hi all, The issue is getting a bit critical here and I would appreciate any help: I keep getting the error "The service cannot be found for the endpoint reference (EPR) http://vedanta:8080/arsys/services/ARService" in my Soap Client (I am using SoapUI). But in Tomcat's log I see the error "- Unable to parse request URL [urn:testWS][/arsys/services] ". I am pretty sure this might be some dumb error on my part. I have set my axis2.xml as follows: <parameter name="servicePath">services</parameter> /* NOTE: contextRoot is not set */ I have set my service.xml as follows: <service> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.receivers.RawXMLINOUTMessageReceiver"/> </messageReceivers> <parameter name="ServiceClass" locked="false">com.remedy.arsys.ws.services.ARService</parameter> </service> I have set my web.xml as follows: <servlet> <servlet-name>AxisServlet</servlet-name> <display-name>Apache-Axis Servlet</display-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-clas s> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/servlet/AxisServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> I have looked at Axis2 source code and it looks like the error is coming from Utils.java "parseRequestURLForServiceAndOperation()" routine. This routine is called by all the dispatchers. I am not sure why the 'path' parameter in 'parseRequestURLForServiceAndOperation()' is set to 'urn:testWS'. 'path' should point to EPR. The error message does mention the correct EPR. Also, when I set my 'servicePath' to 'arsys/services' then the error that is see in Tomcat's log is : - Unable to parse request URL [http://vedanta:8080/arsys/services/ARService][/arsys/arsys/services] - Unable to parse request URL [http://vedanta:8080/arsys/services/ARService][/arsys/arsys/services] - Unable to parse request URL [http://vedanta:8080/arsys/services/ARService][/arsys/arsys/services] - Unable to parse request URL [urn:testWS][/arsys/arsys/services] The 'path' parameter in 'parseRequestURLForServiceAndOperation()' routine now seems to contain the correct EPR but the 'servicePath' has '/arsys' prepended to it. Is 'contextRoot' supposed to be set? What is the definition of 'contextRoot'? Why does '/arsys' get prepended to 'servicePath'? Or in other words what is 'servicePath' supposed to be? How do I get axis2 log to be enabled? I did put log4j.properties and common-logging.properties in the classpath. I hope I can get some answers soon, Thanks, --kumar ________________________________ From: Iyengar, Kumar [mailto:[EMAIL PROTECTED] Sent: Thursday, November 15, 2007 1:22 AM To: [email protected] Subject: RE: Dynamic web services Hi, I am afraid I am not making much headway here. I have my web.xml that specifies the <servlet> and <servlet-mapping>. However, I am not sure what values the axis2.xml parameters should have especially for the ones suggested below: servicePath and contextRoot. The EPR is http://zzz:8080/arsys/services/ARService?server =xxx&WebService=yyy I tried different combinations of values for configRoot and servicePath and got one of the 2 errors. Unable to parse request URL [http://vedanta:8080/arsys/services/ARService][/arsys/ARService] - Unable to parse request URL [http://vedanta:8080/arsys/services/ARService][/arsys/ARService] - Unable to parse request URL [http://vedanta:8080/arsys/services/ARService][/arsys/ARService] - Unable to parse request URL [urn:testWS][/arsys/ARService] Or Unable to parse request URL [urn:testWS][/arsys/ARService] The class that is supposed to handle this has 3 public methods: 1) Void setOperationContext (OperationContext x) 2) OMElement handleRequest(OMElement) 3) Document processRequest(Doc input) --> This one is a carry forward from Axis. I think in the first set of errors, the 3 error messages are corresponding to the above 3 methods. However, none of the methods are executed. Should'nt the specification in web.xml and service.xml be sufficient? My service.xml contains a 'parameter' with ServiceClass name and a messageReceiverfor RAWXML in-out) only. I did not specify any operation. Any detailed explanation would really help. Thanks, --kumar ________________________________ From: Martin Gainty [mailto:[EMAIL PROTECTED] Sent: Monday, November 13, 2000 6:46 PM To: [email protected] Subject: Re: Dynamic web services SoapAction is *usually* prefaced with urn: as seen here operation.setSoapAction("urn:" + opName); so servicePath is incorrect check ServicesDirectory attribute in axis2.xml servicePath attribute in axis2.xml also Make sure your EPR is valid M-- ----- Original Message ----- From: Iyengar, Kumar <mailto:[EMAIL PROTECTED]> To: [email protected] Sent: Tuesday, November 13, 2007 8:54 PM Subject: RE: Dynamic web services Also, I get an error "Unable to parse request URL [urn:testWS2][/arsys/services]". I get this error whether I have a service.xml file or not. The URL that I pass in to my application is http://zzz:8080/arsys/services/ARService?server =xxx&WebService=yyy Has anyone seen this error? --kumar ________________________________ From: Iyengar, Kumar [mailto:[EMAIL PROTECTED] Sent: Tuesday, November 13, 2007 4:31 PM To: [email protected] Subject: Dynamic web services Hi all, We use Axis in a non standard way. The typical use of Axis is where one generates the java stubs and then populates the stubs and deploys the application. In our application we do it a bit dynamically - we have a generic service and when the request comes in, it takes the request and then extracts the document, determines the operation and makes internal api calls. This way we never generate stubs. I am currently upgrading our setup from Axis to Axis2 and having problems with it: 1) I tried creating a service.xml file specifying the 'ServiceClass' name. However, it is not clear whether I need to specify the method name. With Axis I could specify the method name in the wsdd file. 2) Is there a complete documentation that explains all the options that can be specified in a service.xml? I have only found links (especially in IBM developer network) that explain bits and pieces. 3) Also, is it OK not to specify any operation in the service.xml file? What I really want is my code to take control of the Message Context and then extract the document and operation and then make internal calls. 4) if none of that work then do I have to do this by writing my own handler? I hope that is not the case since I could do this very easily with Axis. Any help is greatly appreciated. --kumar
