我正在尝试使用Java Servlet创建RESTful Web服务。问题是我必须通过POST方法将请求传递给Web服务器。该请求的内容不是参数,而是主体本身。
所以我基本上是从红宝石发送这样的:
url = URI.parse(@host)
req = Net::HTTP::Post.new('/WebService/WebServiceServlet')
req['Content-Type'] = "text/xml"
# req.basic_auth 'account', 'password'
req.body = data
response = Net::HTTP.start(url.host, url.port){ |http| puts http.request(req).body }
然后,我必须在我的servlet中检索此请求的主体。我使用经典的readline,所以我有一个字符串。问题是当我必须将其解析为XML时:
private void useXML( final String soft, final PrintWriter out) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException, FileNotFoundException {
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true); // never forget this!
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(soft);
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("//software/text()");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
out.println(nodes.item(i).getNodeValue());
}
}
问题是,builder.parse()
接受:parse(File f)
,parse(InputSource is)
,parse(InputStream is)
。
有什么办法可以在InputSource或类似的东西中转换xml字符串?我知道这可能是一个虚拟的问题,但是Java不是我的事,我被迫使用它,而且我也不是很熟练。
您可以通过StringReader从字符串创建InputSource:
Document doc = builder.parse(new InputSource(new StringReader(soft)));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句