Help!! Problem with Web Service Developer Pack and JBoss
gubenc Oct 5, 2004 8:05 AMHi all,
I would like to use the SUN Web Service developer pack v1.4 under
JBoss 3.2.3 and JDK 1.4. I have a quite mistical class loading problem. I would be
very happy if someone could help me. I describe the trieals i have made
so far ant the error messages in detail.
First of all WSDP 1.4 runs quite well in JBoss for basic funcions. I encountered an
error first when I tried to use a Logger to log the SOAP messages.
I got the following exception in the error log:
[org.apache.axis.encoding.SerializationContextImpl] Start element [http://schemas.xmlsoap.org/soap/envelope/]:Envelo[org.apache.axis.i18n.ProjectResourceBundle] org.apache.axis.i18n.resource::handleGetObject(headers00)
[org.apache.axis.message.SOAPHeader] 0 headers
[org.apache.axis.i18n.ProjectResourceBundle]
org.apache.axis.i18n.resource::handleGetObject(startElem00)[org.apache.axis.encoding.SerializationContextImpl] Start element [http://schemas.xmlsoap.org/soap/envelope/]:Body
[org.apache.axis.utils.NSStack] NSPush (32)
[org.apache.axis.i18n.ProjectResourceBundle] org.apache.axis.i18n.resource::handleGetObject(endElem00)
[org.apache.axis.encoding.SerializationContextImpl] End element soapenv:Body
[org.apache.axis.utils.NSStack] NSPop (32)
[org.apache.axis.i18n.ProjectResourceBundle] org.apache.axis.i18n.resource::handleGetObject(endElem00)
[org.apache.axis.encoding.SerializationContextImpl] End element soapenv:Envelope
[org.apache.axis.i18n.ProjectResourceBundle] org.apache.axis.i18n.resource::handleGetObject(empty00)
[org.apache.axis.utils.NSStack] NSPop (empty)
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body/>
</soapenv:Envelope>
com.sun.xml.rpc.server.http.JAXRPCServletDelegate doPost
SEVERE: caught throwable
java.lang.NoSuchMethodError: javax.xml.soap.SOAPHeader.examineMustUnderstandHeaderElements(Ljava/lang/String;)Ljava/util/Iterator;
at com.sun.xml.rpc.client.HandlerChainImpl.checkMustUnderstand(HandlerChainImpl.java:242)
at com.sun.xml.rpc.server.StreamingHandler.callRequestHandlers(StreamingHandler.java:901)
at com.sun.xml.rpc.server.StreamingHandler.preHandlingHook(StreamingHandler.java:831)
at com.sun.xml.rpc.server.StreamingHandler.handle(StreamingHandler.java:102)
at com.sun.xml.rpc.server.http.JAXRPCServletDelegate.doPost(JAXRPCServletDelegate.java:443)
at com.sun.xml.rpc.server.http.JAXRPCServlet.doPost(JAXRPCServlet.java:86)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.Applicatio
I think this means that the javax.xml.soap.MessageFactory class
use not the sun implementation I packaged with in the WEB-INF/lib
directory but the one in apache axis, which comes with JBoss. So I first
tried to reconfigure the factory explicitely. I decompiled the
javax.xml.soap.MessageFactory class and the FactoryFinter class.
The code to search for the factory implementation looks like this:
ClassLoader classloader;
try
{
classloader = Thread.currentThread().getContextClassLoader();
}
catch(Exception exception)
{
throw new SOAPException(exception.toString(), exception);
}
String s2 = System.getProperty(s);
if(s2 != null)
return newInstance(s2, classloader);
break MISSING_BLOCK_LABEL_46;
Object obj;
obj;
String s5;
obj = System.getProperty("java.home");
String s3 = obj + File.separator + "lib" + File.separator + "jaxm.properties";
File file = new File(s3);
if(!file.exists())
break MISSING_BLOCK_LABEL_154;
Properties properties = new Properties();
properties.load(new FileInputStream(file));
s5 = properties.getProperty(s);
return newInstance(s5, classloader);
obj;
obj = "META-INF/services/" + s;
String s4;
java.io.InputStream inputstream = null;
if(classloader == null)
inputstream = ClassLoader.getSystemResourceAsStream(((String) (obj)));
else
inputstream = classloader.getResourceAsStream(((String) (obj)));
if(inputstream == null)
break MISSING_BLOCK_LABEL_264;
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(inputstream, "UTF-8"));
s4 = bufferedreader.readLine();
bufferedreader.close();
if(s4 != null && !"".equals(s4))
return newInstance(s4, classloader);
break MISSING_BLOCK_LABEL_264;
Exception exception1;
exception1;
if(s1 == null)
throw new SOAPException("Provider for " + s + " cannot be found", null);
else
return newInstance(s1, classloader);
I tried to place a file named javax.xml.soap.MessageFactory into my META-INF/services directory
of the war file with the name of the SUN implementation
(this can be found in the MessageFactory class in the SUN jar file 'saaj-api.jar').
In this configuration I get the following exception:
ava.lang.NoClassDefFoundError: com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl
at com.sun.xml.messaging.saaj.soap.SOAPPartImpl.(SOAPPartImpl.java:52)
at com.sun.xml.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.(SOAPPart1_1Impl.java:24)
at com.sun.xml.messaging.saaj.soap.ver1_1.Message1_1Impl.getSOAPPart(Message1_1Impl.java:48)
at com.sun.xml.rpc.soap.message.SOAPMessageContext.writeSimpleErrorResponse(SOAPMessageContex
This is very strange. There are no axis messages in the log
and It seems that I managed to get JBoss to use the SUN factory
but the SUN implementation canntot load a class.
SOAPPartImpl and SOAPDocumentImpl are in the same package the first
could be loaded and the second could not.
I got the same result when I removed the JBoss.net module from
the deploy directory and restarted JBoss.
I also tried to put the jar files not to my war file but simple copy all of them to the
deploy directory. This rial resulted the following exception when I deployed the application:
java.lang.ClassNotFoundException: com.sun.xml.rpc.server.http.JAXRPCContextListener
at java.net.URLClassLoader$1.run(URLClassLoader.java:198)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3238)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3613)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:821)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595)
at org.jboss.web.tomcat.tc4.EmbeddedTomcatService.createWebContext(EmbeddedTomcatService.java:549)
at org.jboss.web.tomcat.tc4.EmbeddedTomcatService.performDeploy(EmbeddedTomcatService.java:309)
at org.jboss.web.AbstractWebContainer.start(AbstractWebContainer.java:428)
at org.jboss.deployment.MainDeployer.start(MainDeployer.java:832)
at org.jboss.deployment.MainDeployer.start(MainDeploy
It seems that this way no jar is visible from the web application.
I tried to put all jars to the lib/ext of the JVM that runs JBoss as well.
The web application cannot see any of the jar files
and I got the same error message as in the previous case.
Could anyone use WSDP 1.4 successfully with JBoss?
Do you have any ideas how can I get JBoss to use the MessageFactory
implmenentation I package with my web application.
Regards,
Gabor Herman
Software Developer
FlexiTon Kft.