Web Service - Processar XML

Boa Tarde,
Hoje de manhã estava discutindo com meu chefe sobre a necessidade de criar um Web Service para atender uma certa lógica de negocio
Exemplo XML:

<xml>
    <req id="1">
		<cliente id="123"/>
		<solicitacoes size="5">
  		        <solicitacao id="1" value="10"/>
			<solicitacao id="2" value="12"/>
			<solicitacao id="3" value="14"/>
			<solicitacao id="4" value="16"/>
			<solicitacao id="5" value="18"/>
		</solicitacoes
    ></req>
</xml>

O Web Service vai receber esse xml, e utilizar o atributo “solicitacoes” para aplicar uma regra de negocio.
Agora bateu a duvida, qual a melhor forma de fazer esse xml chegar até o Web Service ? E como o Web Service vai receber esse xml ?
O cliente deve enviar o xml para o Web Service (Upload) ? Assim nao tem porque utilizar Web Service, pode ser apenas um Servlet que gerencie uploads… concordam?
Lembrando que essa aplicacao vai ser utilizada por sistemas que conhecem apenas o padrao do xml.
Estou pesquisando pela melhor solução a implementar, aceito sugestões. :smiley:

Renan :?: :lol:

Em geral, Web Services usam SOAP sobre HTTP, ou seja, o SOAP já é um XML. Use as ferramentas adequadas para gerar e trafegar o XML, você não precisar criar um.

Agora, se o seu caso é passar um XML para um Web Service (mesmo que seja SOAP sobre HTTP), você terá de passá-lo como Attachment (anexo).

Isso se você quiser ater-se aos padrões de mercado dos Web Services.

Senão, pode usar Web Services REST, ou então bolar o seu próprio Servlet que faz isso.

Mas já existem ferramentas e APIs que fazem o trabalho chato para você.

Ola, implementei um servlet que trata as requisicoes.
Ainda estou testando, mas a ideia principal ficou assim:

	@SuppressWarnings("unchecked")
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String sucess = "<result>sucess</resul>";
		String error = "<error>Error</error>";
		String result = sucess;

		if (request.getContentLength() > 0) {
			try {
				DocumentBuilder docBuilder = XMLParserUtils.getXMLDocBuilder();

				Document document = docBuilder.parse(request.getInputStream());
				if (document == null) {
					System.out.println(" Document null");
					return;
				}
				Envelope envelope = Envelope.unmarshall(document.getDocumentElement());

				Body body = envelope.getBody();
				Vector bodyEntries = body.getBodyEntries();
				StringWriter writer = new StringWriter();
				Enumeration ob = bodyEntries.elements();
				if (ob.hasMoreElements()) {
					Element element = (Element) ob.nextElement();
					DOM2Writer.serializeAsXML(element.getElementsByTagName("processamentoLote").item(0), writer, false);
					try {
						ProcessamentoLotePedido proce = TreatXML.readProcessamentoLotePedido(writer.toString());
						System.out.println(proce);
					} catch (Exception e) {
						result = error;
					}
				}
			} catch (SAXException e) {
				result = error;
			}
		}
		response.setContentType("text/xml");
		response.getWriter().append(result);
		response.getWriter().flush();
	}

XML:

<SOAP-ENV:Envelope
	xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
	xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
	xmlns:xsd="http://www.w3.org/1999/XMLSchema">
	<SOAP-ENV:Header>
		<jaws:MessageHeader xmlns:jaws="processamentoLote">
			<From>asdfsdafsda</From>
			<To>You</To>
			<MessageId>9999</MessageId>
		</jaws:MessageHeader>
	</SOAP-ENV:Header>
	<SOAP-ENV:Body>
		<processamentoLote>
			<cdEmp>123456</cdEmp>
			<dtEnvio>2008-08-18 15:19:52.953 BRT</dtEnvio>
			<arrPedido class="list">
				<pedido>
					<cdPedido>12</cdPedido>
					<cdCliente>10</cdCliente>
					<dtPedido>2008-08-18 15:19:52.953 BRT</dtPedido>
					<dtConfirmacao>2008-08-18 15:19:52.953 BRT</dtConfirmacao>
					<arrItem class="list">
						<item>
							<cdItem>0</cdItem>
							<vlItem>40.0</vlItem>
						</item>
						<item>
							<cdItem>1</cdItem>
							<vlItem>40.0</vlItem>
						</item>
						<item>
							<cdItem>2</cdItem>
							<vlItem>40.0</vlItem>
						</item>
						<item>
							<cdItem>3</cdItem>
							<vlItem>40.0</vlItem>
						</item>
						<item>
							<cdItem>4</cdItem>
							<vlItem>40.0</vlItem>
						</item>
					</arrItem>
				</pedido>
			</arrPedido>
		</processamentoLote>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

No xml pego a tag que preciso. E utilizo XStream para montar meu objeto.

DOM2Writer.serializeAsXML(element.getElementsByTagName("processamentoLote").item(0), writer, false);
ProcessamentoLotePedido proce = TreatXML.readProcessamentoLotePedido(writer.toString());

Essa foi a maneira mais simples de popular meus objetos… será que é gambia ?? :?:
Esta api XStream é super util para manipular xml, mas sera que é possivel montar os objetos atraves de um objeto org.w3c.dom.Document ?? Estava lendo a api, mas nao encontrei nada quanto a isso. :?: