Estoy tratando de crear un servicio web RESTful usando un Servlet Java. El problema es que tengo que pasar a través de un método POST a un servidor web una solicitud. El contenido de esta solicitud no es un parámetro sino el cuerpo mismo.Usando una cadena dentro del método de análisis DocumentBuilder (lo necesito para analizar XML usando XPath)
Así que, básicamente, de rubí enviar algo como esto:
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 }
entonces tengo que recuperar el cuerpo de esta solicitud en mi servlet. Uso la línea de lectura clásica, así que tengo una cadena. El problema es cuando tengo que analizarlo como 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());
}
}
El problema es que builder.parse()
acepta: parse(File f)
, parse(InputSource is)
, parse(InputStream is)
.
¿Hay alguna manera de que pueda transformar mi cadena xml en un InputSource o algo así? Sé que podría ser una pregunta tonta pero Java no es lo mío, me veo obligado a usarlo y no soy muy habilidoso.
Gracias Dimitre para la edición. Me estoy acostumbrando a este código de formato. – dierre
¿Se puede publicar un XML de muestra que funcione con este código? Estoy trabajando en un diseño similar y mi nodo, después de la consulta xpath vuelve nulo, así que sospecho que mi expresión xpath o mi xml no está bien formado. – mobibob