/ / javax.xml.bind.UnmarshalException: elemento inesperado (uri: “”, local: “soap: Envelope”) - java, serviços da web, jaxb, wsdl

javax.xml.bind.UnmarshalException: elemento inesperado (uri: “”, local: “soap: Envelope”) - java, serviços da web, jaxb, wsdl

Oi eu gerei classes java a partir de um WSDLusando wsimport.But eu escrevi a resposta para um arquivo * .xml. Mas agora eu quero ler esse arquivo xml e preencher as classes java que já foram geradas.

Eu tentei:

JAXBContext jc = JAXBContext.newInstance(Report.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Report rc = (Report) unmarshaller.unmarshal(source);

ou

JAXBContext jc = JAXBContext.newInstance(Report.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Report rc = (Report) unmarshaller.unmarshal(new File("file.xml"));

Report é a classe que recebo como resposta ao enviar a solicitação

No primeiro caso eu recebo

javax.xml.bind.UnmarshalException: unexpected element (uri: "", local:"soap:Envelope") Expected elements are: (<{"http://pagewhereisthewsdl.com"}CLASSES>)+

No segundo caso

javax.xml.bind.UnmarshalException: unexpected element (uri: "http://schemas.xmlsoap.org/soap/envelope/", local:"Envelope") Expected elements are: (<{"http://pagewhereisthewsdl.com"}CLASSES>)+

XML é assim:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns3:GetReportOnlineResponse xmlns:ns2="http://pagewhereisthewsdl.com/document" xmlns:ns3="http://pagewhereisthewsdl.com/endpoint">
<ns2:Report>
...
</ns2:Report>
</ns3:GetReporteOnlineResponse>
</soap:Body>
</soap:Envelope>

Ou o que posso fazer?

Respostas:

0 para resposta № 1

Eu acredito que você não está levando em consideração o envelope SOAP. Você precisa extrair o conteúdo do corpo primeiro.

String xml = "<INSERT XML>";
SOAPMessage message = MessageFactory.newInstance().createMessage(null, new ByteArrayInputStream(xml.getBytes()));
JAXBContext jc = JAXBContext.newInstance(Report.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Report rc = (Report) unmarshaller.unmarshal(message.getSOAPBody().extractContentAsDocument());