Hi,
I am a Beginner, and need some help.
I am using .Net service and Java.
One of my webMethod can return an array of integer,
and the xml will looks like this:
<returnIntsResult>
<int>1</int>
<int>2</int>
<int>3</int>
</returnIntsResult>
How can I read all those integers?
Right now I am using the following java code and can only read the
first integer:
try {
// Since the Body.unmarshall() handler is static, we can't
// replace the basic machinery easily. Instead, we must obtain
// and parse the message on our own.
this.soapMessage_ = this.message_.receive();
XMLReader reader =
(XMLReader)Class.forName("org.apache.xerces.parsers.SAXParser").newInstance();
SAXHandler handler = new SAXHandler();
handler.setElementToSearchFor ("returnIntsResult");
// Set the Content Handler
reader.setContentHandler (handler);
// Parse the file
reader.parse ( new InputSource (new StringReader
(this.soapMessage_.getContent().toString() )));
// If we reached here, the result has been parsed and
// stored in the handler instance.
for(int i=0; i<3; i++){
returnValue[i]="";
returnValue[i] = handler.getResult();
}
}
catch (Exception exception) {
..........
Thank you for your help
Arne Vajhøj - 19 May 2007 21:23 GMT
> I am a Beginner, and need some help.
> I am using .Net service and Java.
[quoted text clipped - 9 lines]
>
> How can I read all those integers?
The code attached below can parse that XML.
But is it a web service ?
If it is then you should not be parsing the XML manual. You
should generate a client stub from the WSDL so you can call
a method and get an int array returned without you having
to know anything about XML.
Arne
==============================================
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
public class SAXDemo {
public static void main(String[] args) {
ArrayList<String> result = new ArrayList<String>();
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
xr.setContentHandler(new MySaxParser(result));
xr.parse("C:\\demo.xml");
} catch (FactoryConfigurationError e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
for(String item : result) {
System.out.println(item);
}
}
}
class MySaxParser extends DefaultHandler {
private StringBuffer element = new StringBuffer();
private ArrayList<String> result;
public MySaxParser(ArrayList<String> result) {
this.result = result;
}
public void characters(char buf[], int offset, int len) throws
SAXException {
element.append(new String(buf, offset, len));
return;
}
public void startElement(String namespaceURI, String localName,
String rawName, Attributes atts) throws SAXException {
if (rawName.equals("int")) {
element = new StringBuffer();
}
return;
}
public void endElement(String namespaceURI, String localName, String
rawName) throws SAXException {
if (rawName.equals("int")) {
result.add(element.toString());
}
return;
}
}