2017-02-11 13 views
0

私はsaxパーサーを使用するにはthisチュートリアルに従っています。私の入力がxmlファイルを使用している場合、以下の行が正常に動作しています。しかし、Webサービスからの応答として取得するXMLをどのように解析できますか? saxパーサへの入力としてsoapレスポンスを渡すには?サックスを使用してxml応答を解析する

new MySaxParser("catalog.xml"); 

私のコード

public class soapTest{ 
    private static SOAPMessage createSoapRequest() throws Exception{ 
     MessageFactory messageFactory = MessageFactory.newInstance(); 
     SOAPMessage soapMessage = messageFactory.createMessage(); 
     SOAPPart soapPart = soapMessage.getSOAPPart(); 
       SOAPEnvelope soapEnvelope = soapPart.getEnvelope(); 
       soapEnvelope.addNamespaceDeclaration("action", "http://www.webserviceX.NET/"); 
     SOAPBody soapBody = soapEnvelope.getBody(); 
     SOAPElement soapElement = soapBody.addChildElement("GetQuote", "action"); 
     SOAPElement element1 = soapElement.addChildElement("symbol", "action"); 
     element1.addTextNode("ticket"); 
      MimeHeaders headers = soapMessage.getMimeHeaders(); 
      headers.addHeader("SOAPAction", "http://www.webserviceX.NET/GetQuote"); 
     soapMessage.saveChanges(); 
     System.out.println("----------SOAP Request------------"); 
     soapMessage.writeTo(System.out); 
     return soapMessage; 
    } 
    private static void createSoapResponse(SOAPMessage soapResponse) throws Exception { 
     TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
     Transformer transformer = transformerFactory.newTransformer(); 
     Source sourceContent = soapResponse.getSOAPPart().getContent(); 
     System.out.println("\n----------SOAP Response-----------"); 
     StreamResult result = new StreamResult(System.out); 
     transformer.transform(sourceContent, result); 
    } 
    public static void main(String args[]){ 
      try{ 
      SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance(); 
      SOAPConnection soapConnection = soapConnectionFactory.createConnection(); 
      String url = "http://www.webservicex.net/stockquote.asmx?wsdl"; 
      SOAPMessage soapRequest = createSoapRequest(); 
      //hit soapRequest to the server to get response 
      SOAPMessage soapResponse = soapConnection.call(soapRequest, url); 

// Not able to proceed from here. How to use sax parser here 

     soapConnection.close(); 

     }catch (Exception e) { 
      e.printStackTrace(); 
     } 
} 

解析し、XML応答から値を取得する方法。

答えて

1

は、私は次のように進むことができ、コードを修正した:

import java.io.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import org.xml.sax.*; 
import org.xml.sax.helpers.*; 

/** 
* Demo xml processing 
*/ 
public class Demo { 

    private static final Logger log = Logger.getLogger(Demo.class.getName()); 

    private static final int CHUNK = 1048576; //1MB chunk of file 

    public static void main(String[] args) { 

     try { 
      ByteArrayOutputStream out = new ByteArrayOutputStream(CHUNK); 

      Writer writer = new OutputStreamWriter(out, "UTF-8"); 

      /* here put soapMessage.writeTo(out); 
       I will just process this hard-coded xml */ 
      writer.append("<greeting>Hello!</greeting>"); 
      writer.flush(); 

      ByteArrayInputStream is 
        = new ByteArrayInputStream(out.toByteArray()); 

      XMLReader reader = XMLReaderFactory.createXMLReader(); 

      //define your handler which extends default handler somewhere else 
      MyHandler handler = new MyHandler(); 
      reader.setContentHandler(handler); 

      /* reader will be closed with input stream */ 
      reader.parse(new InputSource(new InputStreamReader(is, "UTF-8"))); 
      //Hello in the console 
     } catch (UnsupportedEncodingException ex) { 
      log.severe("Unsupported encoding"); 
     } catch (IOException | SAXException ex) { 
      log.severe("Parsing error!"); 
     } finally { 
      /*everything is ok with byte array streams! 
       closing them has no effect! */ 
     } 

    } 
} 

class MyHandler extends DefaultHandler { 

    @Override 
    public void characters(char ch[], int start, int length) 
      throws SAXException { 
     System.out.print(String.copyValueOf(ch, start, length)); 
    } 
} 
+0

おかげで、私の問題に探して。私は石鹸の応答をストリームすることができますが、私のコードはどこかにぶら下がっています。あなたは私の問題を知るために、以下の投稿を読むことができますhttp://stackoverflow.com/questions/42210300/stream-soap-response-and-parse-using-sax-parser – user4324324

+0

私はコードをスケッチしたようですが、ストリームを省略醸造からの閉鎖、私はポストを修正する(例外をスローするのではなく、それを捕まえてストリームを閉じる、それが行われるべきである)。その後、あなたの 'ぶら下がり'はおそらく消え去るでしょう –

+0

私は自分自身を欺いたことを発見したばかりで、さらに悪いことに、あなたもこれを見てください:http://stackoverflow.com/questions/484119/why-doesnt-more-java-code- use pipedinputstream-pipedoutputstream –

関連する問題