[quote=alves.Felipe][quote=AGAraujo]
Bom dia Felipe…
No meu caso, o problema era somente a versão do Xalan que ao fazer o parser ficava assim:
O que fiz foi apenas adicionar no class path a ultima versao do Xalan para a versao 2.7.1, pois há relatos que existe um BUG na versão que vem com o JDK 1.6. Com ou sem BUG (mas parece que sim) a verdade é que resolveu.
//local do arquivo de lote de envio (faço assim pois o sistema é independente da construção do xml)
File file = new File("*-nfe.xml");
//fazer a conversao de stream para Document
DOMResult domResult = new DOMResult();
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new StreamSource(file), domResult);
DocumentImpl documentImpl = (DocumentImpl) domResult.getNode();
//adicionar os dados em nfeDadosMsg - neste caso nfeDadosMsg é uma variavel do tipo SOAPBodyElement
SOAPElement soapElement = SOAPFactory.newInstance().createElement(documentImpl.getDocumentElement());
nfeDadosMsg.addChildElement(soapElement);
t+[/quote]
Fala AGAraujo… td certo!?
Então…usei o se exemplo para fazer o meu… mas ficou meio estranho, quando crio o meu elemento (soapElement ) ele não fica com o xml inteiro… fica só com a declaração do infNFe…
segue como fica o meu envelope:
e reparou que ficou com 2 namespace o envNFe…?!
segue meu código para vc dar uma sugestão…
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage message = messageFactory.createMessage();
SOAPPart soapPart = message.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
SOAPBody body = envelope.getBody();
SOAPHeader head = envelope.getHeader();
SOAPElement headElement = head.addChildElement(envelope.createName("nfeCabecMsg","ns1","http://www.portalfiscal.inf.br/nfe/wsdl/NFeRecepcao2"));
headElement.addChildElement("cUF", "ns1").addTextNode("41");
headElement.addChildElement("versaoDados", "ns1").addTextNode("2.00");
SOAPElement soapElement = SOAPFactory.newInstance().createElement(documentImpl.getDocumentElement());
body.addChildElement(soapElement);
message.saveChanges();
valeo pela ajuda…
abraco
[/quote]
Aparentemente está tudo ok em termos de implementação… vale lembrar que este exemplo que te passei eu uso JAXB/JWS e pelo que vi vc esta usando DOM/AXIS, estou certo??
Bom, se for isto, eu li algo sobre isto e talvez eu tenha a solução em casa… vou verificar e posto amanhã.
Mesmo assim veja que no me caso eu implementei diferente de você… no seu caso você implementou o body sem criar o nfeDadosMsg. Isto muda muita coisa, pois você estará considerando este elemento manipulável durante a transformação e isto pode ser um problema quando se trata dos níveis do DOM…
Se for agir assim precisa verificar o mapeamento correto, incluindo este como parte dos seu dados a serem enviados. Entendeu??
No meu caso o meu fica assim:
//construindo o nfeDadosMsg
SOAPBodyElement nfeDadosMsg = body.addBodyElement(new QName(schemaTargetNamespace, "nfeDadosMsg", XMLConstants.DEFAULT_NS_PREFIX));
//fazendo o unmarshaller
File file = new File("*-nfe.xml");
JAXBContext jaxbContext = JAXBContext.newInstance("br.inf.portalfiscal.nfe");
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
JAXBElement jaxbElement = (JAXBElement) unmarshaller.unmarshal(file);
//convertendo em elemento DOM
DOMResult domResult = new DOMResult();
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new JAXBSource(jaxbContext, jaxbElement), domResult);
DocumentImpl documentImpl = (DocumentImpl) domResult.getNode();
//
SOAPElement soapElement = SOAPFactory.newInstance().createElement(documentImpl.getDocumentElement());
nfeDadosMsg.addChildElement(soapElement);