SOAP messaging with SAAJ

P

Phil Wilkinson

A newb question really that I hope someone can help me with.

I am experimenting with SOAP using a standalone Java application, built
along the lines of this tutorial
http://www-128.ibm.com/developerworks/xml/library/x-jaxmsoap/ but using
Google's API so that I can at least send and get a response from
something. As in the tutorial I have dowloaded and set up Java Web
Services Developer Pack and I am using Eclipse. (Yes I know there are
easier ways like using Google's Java client library but I'm using SAAJ,
as the SOAP service/environment I will eventually be using means that
this is all that I will have available to me).

I can send and receive the SOAP message OK using the Transformer object
and can dump out the response tree. I really need to obtain the
individual elements value only (in this case a correct spelling
suggestion) but when I modify my code to try to access the individual
elements as in the Sun tutorial here
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/SAAJ3.html I get an
error message related to the iterator, in particular it seems unable to
access the individual element (see below).

java.util.NoSuchElementException
at
com.sun.xml.messaging.saaj.soap.impl.ElementImpl$3.next(ElementImpl.java:723)
at Request.main(Request.java:56)

Iterator code below:

SOAPBody soapBody = response.getSOAPBody();
System.out.println("\nRESPONSE:\n");
Iterator iterator = soapBody.getChildElements(bodyName);
SOAPBodyElement ReturnedBodyElement =
(SOAPBodyElement)iterator.next();
String returned = ReturnedBodyElement.getValue();
System.out.print("The Response from the server is ");
System.out.println(returned);

Using Transformer object I get this (so I know I can get a response!):

<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:doSpellingSuggestionResponse xmlns:ns1="urn:GoogleSearch"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<return xsi:type="xsd:string">half</return>
</ns1:doSpellingSuggestionResponse>

</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Any suggestions as to how I can get the iterator to work so I can
access the returned value would be much appreciated.
 
O

Oliver Wong

Phil Wilkinson said:
I get an
error message related to the iterator, in particular it seems unable to
access the individual element (see below).

java.util.NoSuchElementException
at
com.sun.xml.messaging.saaj.soap.impl.ElementImpl$3.next(ElementImpl.java:723)
at Request.main(Request.java:56)

Iterator code below:

SOAPBody soapBody = response.getSOAPBody();
System.out.println("\nRESPONSE:\n");
Iterator iterator = soapBody.getChildElements(bodyName);
SOAPBodyElement ReturnedBodyElement =
(SOAPBodyElement)iterator.next();
String returned = ReturnedBodyElement.getValue();
System.out.print("The Response from the server is ");
System.out.println(returned);

Did you check the value of bodyName?

- Oliver
 
H

hawat.thufir

Phil said:
A newb question really that I hope someone can help me with.

I am experimenting with SOAP using a standalone Java application, built
along the lines of this tutorial
http://www-128.ibm.com/developerworks/xml/library/x-jaxmsoap/ but using
Google's API so that I can at least send and get a response from
something. As in the tutorial I have dowloaded and set up Java Web
Services Developer Pack and I am using Eclipse. (Yes I know there are
easier ways like using Google's Java client library but I'm using SAAJ,
as the SOAP service/environment I will eventually be using means that
this is all that I will have available to me).

I can send and receive the SOAP message OK using the Transformer object
and can dump out the response tree.
[...]

If you're willing to post it, I'd like to see your source code, as I'm
also interested in the Google API :)


-Thufir
 
M

Mike Schilling

Phil Wilkinson said:
A newb question really that I hope someone can help me with.

I am experimenting with SOAP using a standalone Java application, built
along the lines of this tutorial
http://www-128.ibm.com/developerworks/xml/library/x-jaxmsoap/ but using
Google's API so that I can at least send and get a response from
something. As in the tutorial I have dowloaded and set up Java Web
Services Developer Pack and I am using Eclipse. (Yes I know there are
easier ways like using Google's Java client library but I'm using SAAJ,
as the SOAP service/environment I will eventually be using means that
this is all that I will have available to me).

I can send and receive the SOAP message OK using the Transformer object
and can dump out the response tree. I really need to obtain the
individual elements value only (in this case a correct spelling
suggestion) but when I modify my code to try to access the individual
elements as in the Sun tutorial here
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/SAAJ3.html I get an
error message related to the iterator, in particular it seems unable to
access the individual element (see below).

java.util.NoSuchElementException
at
com.sun.xml.messaging.saaj.soap.impl.ElementImpl$3.next(ElementImpl.java:723)
at Request.main(Request.java:56)

Iterator code below:

SOAPBody soapBody = response.getSOAPBody();
System.out.println("\nRESPONSE:\n");
Iterator iterator = soapBody.getChildElements(bodyName);
SOAPBodyElement ReturnedBodyElement =
(SOAPBodyElement)iterator.next();
String returned = ReturnedBodyElement.getValue();
System.out.print("The Response from the server is ");
System.out.println(returned);

Using Transformer object I get this (so I know I can get a response!):

<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:doSpellingSuggestionResponse xmlns:ns1="urn:GoogleSearch"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<return xsi:type="xsd:string">half</return>
</ns1:doSpellingSuggestionResponse>

</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Any suggestions as to how I can get the iterator to work so I can
access the returned value would be much appreciated.


My WAG is that you're leaving out the namespace of
doSpellingSuggestionResponse.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top