Win a copy of Re-engineering Legacy Software this week in the Refactoring forum
or Docker in Action in the Cloud/Virtualization forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

getSOAPBody gives NoSuchMethod

 
mark weitz
Greenhorn
Posts: 10
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I'm trying to work though some SOAP samples but keep hitting the same problem.
I've created my SOAP message, sent it, and got a response back. I can print the response using response.writeTo(System.out) and see that I get a good response. Now I'm trying to do something with the response. All the examples show getting the body of the response with response.getSOAPBody(). However I keep getting a NoSuchMethod exception.

I am running J2RE 1.4.1.

I am using jwsdp-1.6 with the following classpath:

C:\Sun\jwsdp-1.6/saaj/lib/saaj-api.jar;
C:\Sun\jwsdp-1.6/saaj/lib/saaj-impl.jar;
C:\Sun\jwsdp-1.6/jwsdp-shared/lib/commons-logging.jar;
C:\Sun\jwsdp-1.6/jwsdp-shared/lib/mail.jar;
C:\Sun\jwsdp-1.6/jwsdp-shared/lib/activation.jar;
C:\Sun\jwsdp-1.6/jaxp/lib/endorsed/dom.jar;
C:\Sun\jwsdp-1.6/jaxp/lib/endorsed/xercesImpl.jar;
C:\Sun\jwsdp-1.6/jaxp/lib/endorsed/sax.jar;
C:\Sun\jwsdp-1.6/jaxp/lib/endorsed/xalan.jar;

Here's part of the code that sends the message and trys to get the SOAP body.

SOAPMessage reply = connection.call(message,
"http://services.xmethods.net:80/soap/servlet/rpcrouter");
connection.close();

System.out.println("\n\nRESPONSE:\n");
reply.writeTo(System.out);

System.out.println("before getSOAPBody");

SOAPBody soapBody = reply.getSOAPBody();

System.out.println("after getSOAPBody");


And the results that get printed to my console:

RESPONSE:

<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xm
lns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org
/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getPriceResponse xmlns:ns1="urn:xmethods-BNPriceCheck" SOAP-ENV:encodingSty
le="http://schemas.xmlsoap.org/soap/encoding/">
<return xsi:type="xsd:float">-1.0</return>
</ns1:getPriceResponse>

</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
before getSOAPBody
Exception in thread "main" java.lang.NoSuchMethodError: javax.xml.parsers.SAXPar
serFactory: method getSchema()Ljavax/xml/validation/Schema; not found
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.<init>(Unknown
Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl.newSAXPa
rser(Unknown Source)
at com.sun.xml.messaging.saaj.util.ParserPool.get(ParserPool.java:42)
at com.sun.xml.messaging.saaj.soap.EnvelopeFactory.createEnvelope(Envelo
peFactory.java:62)
at com.sun.xml.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.createEnvelope
FromSource(SOAPPart1_1Impl.java:39)
at com.sun.xml.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl
.java:98)
at com.sun.xml.messaging.saaj.soap.MessageImpl.getSOAPBody(MessageImpl.j
ava:768)
at SendSOAP.main(SendSOAP.java:55)


Any ideas on how to overcome this problem?
 
dale con
Ranch Hand
Posts: 93
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
try something like this

URL endpoint = "http://......"
Service service = new Service();
Call call = (Call)service.createCall();
setTargetEndpointAddress(endpoint);
call.setOperationName("method you are calling");

String result = (String)call.invoke(new Object[]{params if any});

Message message = call.getResponseMessage();
SOAPEnvelope envelope = message.getSOAPEnvelope();
envelope.getBody();
.....

I haven't tried this so don't know whether it will work
 
mark weitz
Greenhorn
Posts: 10
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thanks for the alternate code.

I have sort of solved the problem for now.

Rather than using jwsdp 1.6 I have downloaded v 1.4. Using the 1.4 jaxp and saaj classes I was able to get the getSOAPBody method work. I am still bothered that my v 1.6's jaxp and saaj do not work in harmony for getSOAPBody.

Anyone have any thoughts on this?
 
Tim West
Ranch Hand
Posts: 539
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Based on this, you need a 1.4.2 or greater JRE. Dunno whether that'd be causing this problem though.


-Tim
 
Tim West
Ranch Hand
Posts: 539
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Ugh, it won't - the method that causes the error doesn't exist in JDK1.4.2 either.



-Tim
 
Mani Krishnan
Greenhorn
Posts: 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi,

Even i faced the same problem. But i resolved it. Pls follow the below steps to resolve this problem.
1. Create the below directory where JDK installed in your machine.
<JAVA_HOME>/jre/lib/endorsed
2. Copy the jar files from the below directory where WSDP 1.6 installed in your machine.
<WSDP_HOME>/jaxp/lib
<WSDP_HOME>/jaxp/lib/endorsed
3. Paste all the jar files newly created directory <JAVA_HOME>/jre/lib/endorsed

Let me know if you still face any problem.

Thanks,
Mani
 
Siva Balasundaram
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Mani

I still facing the same problem even after following your suggestions.

Error message is
Exception in thread "main" java.lang.NoSuchMethodError: javax.xml.parsers.DocumentBuilderFactory: method getSchema()Ljavax/xml/validation/Schema; not found
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.<init>(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)

any other suggestions

Regards
Siva
 
Siva Balasundaram
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Mani

It worked fine thanks.

regards
Siva
 
mark weitz
Greenhorn
Posts: 10
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Mani was on the right path. Here is another answer I received from a Sun JAXP site. I have not tried this solution.

To run your class with JRE1.4.2, you need to use endorsed mechanism, as shown below:
java -Djava.endorsed.dirs=<directory of jaxp jar files> UddiPing

JRE uses the classes which are bundled in it by default. So, it doesn't help
even if you set CLASSPATH to appropriate jars. To override the deafult jars, you
need to use endorsed way.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic