Я пытаюсь создать веб-сервис RESTful с помощью Java Servlet. Проблема в том, что я должен передать через метод POST запрос на веб-сервер. Содержимое этого запроса не является параметром, кроме самого тела.
Итак, я в основном посылаю из Ruby что-то вроде этого:
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 }
Затем мне нужно получить тело этого запроса в моем сервлете. Я использую классическую 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)
.
Есть ли способ преобразовать мою XML-строку в InputSource или что-то в этом роде? Я знаю, что это может быть фиктивный вопрос, но Java не моя вещь, я вынужден использовать ее, и я не очень квалифицирован.