Okay ...
Somehow, somewhere .. I finally was able to make it work. Here's what I did:
1) Undeployed Apache-SOAP and all references to soap.jar. Restart iWS
2) Make sure you are using JDK 1.3.1 ( which I am already before ) as specified at http://docs.sun.com/source/817-0540-10/app_c1.html#14137
3) Add Apache-SOAP runtime ( soap.jar ) and other related JAR files to iWS classpath ( e.g.: jvm.classpath in config/jvm12.conf, also specified in http://docs.sun.com/source/817-0540-10/app_c1.html#14137)
4) Deployed Apache-SOAP ( using wdeploy ... also specified in http://docs.sun.com/source/817-0540-10/app_c1.html#14137 ). This should explode soap.war into a directory you specify via the -d option of wdeploy.
5) Restart iWS. Test that Apache-SOAP is running ( e.g. point browser to http://x.x.x.x:/soap/servlet and test the links )
..so far so good ... but not good enough since I had the same result last week where Apache-SOAP is working by my service could not load a class that comes with Apache-SOAP.
At this point, there are 2 places where the iWS classloader(s) can load the Apache-SOAP libraries: in soap.jar ( from jvm.classpath in config/jvm12.conf ) and in the exploded soap.war.
6) Deployed my SOAP service by adding the JAR containing the service in the directory of the exploded soap.war ( e.g.: in WEB-INF/lib )
7) Test my service ... but I am getting a faultcode of SOAP-ENV:Server.BadTargetObjectURI... complaining that it cannot find the class for the service that I deployed.
8) Restart iWS, just in case it did not load the new JAR, then test my SOAP service again ... still cannot find the class.
9) Removed soap.jar from jvm.classpath in config/jvm12.conf ... restarted iWS
10) Retest my SOAP service ... finally loaded my classes!
So JARs loaded from jvm.classpath in the config/jvm12.conf file are loaded versus those deployed as a web application ( via wdeploy ) are using different classloaders ... so much so that if soap.jar is in jvm.classpath in the config/jvm12.conf file, it would expect that SOAP service to be in that classpath as well ( did not try that ). The alternative that I did was to simply remove soap.jar from the jvm.classpath in the config/jvm12.conf .... and put my JAR in the exploded soap.war, so that Apache-SOAP and my service are loaded by the same classloader.
Now there are a few more things to consider:
11) iPlanet6 has its own built-in JARs for JAXP, Crimson, and Xalan ( in servers/https/jar ). If your SOAP service relies on the newer versions of theses APIs, you will need to override those built-in with IPlanet6 iWs with the newer versions by putting the new JAR files in jvm.classpath of config/jvm12.conf, then restart iWS.
Jesus M. Salvo Jr. wrote:
I checked all that I can find .... there are only 2 places that Apache-SOAP is loaded:
1) exploded soap.war -- This was the case before I added soap.jar into the server's classpath.
2) soap.jar
What is interesting is that both the documentation at Sun ( for iPlanet WebServer 6.0 ) and at Apache-SOAP ( for iPlanet Application Server 6.0 though ) says that you should add soap.jar into the server's classpath __AND__ deploy soap.war. Just wondering why the need to do both.
Anyway ... anyone has any code / tools to determine from which JAR or directory a specific class is loaded from? ( ... and which classloader, if possible )?
Scott Nichol wrote:
I have no experience with iWS, but plenty of experience with weird class loader issues. Since iWS is claiming it cannot load a class that seems to be in the exploded soap.war, it is very likely that some class in soap.war was loaded from another location. If you have soap.jar in the classpath used by iWS, or some magic directory iWS loads stuff from, or in $JAVA_HOME/jre/lib/ext, that may be the cause of the error. Check everything you can to be sure there is exactly one place from which to load the Apache SOAP classes, namely the directory with the exploded war.
On 24 Jan 2003 at 12:07, Jesus M. Salvo Jr. wrote:
Anyone installed Apache SOAP 2.3.1 on IPlanet Webserver ( IWS )6.0 SP3?
I currently have Apache SOAP 2.3.1 installed and working okay including my SOAP services on Tomcat 4.1.8., but I would also like to use it with iPlanet Webserver 6.0 ( includes support for Servlet 2.2 and JSP 1.1 ).. The installation documentation at Apache SOAP web site is for iPlanet _Application_ Server, not iPlanet Webserver ( different beasts altogether )
The problem I am having is that the Apache SOAP installation seems to have worked fine by doing the following:
* Deployed soap.war via the Web GUI tool to deploy a web application. This extracted soap.war into /usr/iplanet/servers/<server-name>/web-apps/soap ( This directory is specified during the deployment in the previous step )
* Restarted IWS just to make sure.
* Able to point my browser to http://192.168.0.82/soap
* Able to view the Apache SOAP admin page, list deployed services, etc ...
* Able to view http://192.168.0.82/soap/rpcrouter and it said: "Sorry, I don't speak via HTTP GET- you have to use HTTP POST to talk to me."
* Able to deploy my SOAP messaging services via the Apache SOAP command line ( java org.apache.soap.server.ServiceManagerClient http://192.168.0.82/soap/servlet/rpcrouter deploy mm7.xml ) .. where mm7.xml is the SOAP deployment descriptor
So what's my problem?
When I send a message to my SOAP messaging service, I get the following SOAP fault back from the server:
<faultcode>SOAP-ENV:Server.Exception:</faultcode>
<faultstring>org/apache/soap/util/xml/XMLJavaMappingRegistry</faultstring>
<faultactor>/soap/servlet/messagerouter</faultactor>
<detail>
<stackTrace>java.lang.NoClassDefFoundError: org/apache/soap/util/xml/XMLJavaMappingRegistry
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:195)
at org.apache.soap.rpc.SOAPContext.loadClass(SOAPContext.java:564)
at org.apache.soap.server.http.ServerHTTPUtils.getTargetObject(ServerHTTPUtils.java:275)
at org.apache.soap.providers.MsgJavaProvider.locate(MsgJavaProvider.java:113)
at org.apache.soap.server.http.MessageRouterServlet.doPost(MessageRouterServlet.java:307)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.iplanet.server.http.servlet.NSServletRunner.invokeServletService(NSServletRunner.java:897)
at com.iplanet.server.http.servlet.WebApplication.service(WebApplication.java:1059)
at com.iplanet.server.http.servlet.NSServletRunner.ServiceWebApp(NSServletRunner.java:959)
</stackTrace>
</detail>
It could not find org/apache/soap/util/xml/XMLJavaMappingRegistry ... even though that class is in the directory ( exploded from soap.war by Iplanet ):
/usr/iplanet/servers/<server-name>/web-apps/soap/WEB-INF/classes/org/apache/soap/util/xml/.
... which is weird given that it was able to load the MessageRouter and RPCRouter servlets, but not the XMLJavaMappingRegistry??
I have tried putting soap.jar into the /usr/iplanet/servers/<server-name>/web-apps/soap/WEB-INF/lib directory, restarted IWS.
Same error.
I have also tried putting soap.jar in the server's CLASSPATH as specified in
http://docs.sun.com/source/817-0540-10/app_c1.html#14137
Same error.
Any ideas?
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
Scott Nichol
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
-- Jesus M. Salvo Jr. Mobile Internet Group Pty Ltd (formerly Softgame International Pty Ltd) M: +61 409 126699 T: +61 2 94604777 F: +61 2 94603677 PGP Public key: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xC0BA5348 -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
