Pessoal tento converter um XML para um tipo “Retorno” , atravez do meu metodo
private Retorno criarRetorno(InputStream xml) throws JAXBException{
System.out.println("criarRetorno");
JAXBContext context = JAXBContext.newInstance(Retorno.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
JAXBElement<? extends Retorno> element = (JAXBElement<? extends Retorno>) unmarshaller.unmarshal(xml);
Retorno retorno = element.getValue();
return retorno;
}
porem ele gera esta exceção “javax.xml.bind.UnmarshalException”
javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException: Premature end of file.]
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:315)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:510)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:215)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:184)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:184)
at com.accurate.acec.payment.gateway.CieloPagadorUtil.criarRetorno(CieloPagadorUtil.java:176)
at com.accurate.acec.payment.gateway.CieloPagadorUtil.enviar(CieloPagadorUtil.java:243)
at com.accurate.acec.payment.gateway.CieloPagadorUtil.createTransaction(CieloPagadorUtil.java:92)
at com.accurate.acec.webservices.services.CieloWebServicesImpl.createTransaction(CieloWebServicesImpl.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at weblogic.wsee.jaxws.WLSInstanceResolver$WLSInvoker.invoke(WLSInstanceResolver.java:101)
at weblogic.wsee.jaxws.WLSInstanceResolver$WLSInvoker.invoke(WLSInstanceResolver.java:83)
at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:152)
at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:264)
at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:93)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:604)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:563)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:548)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:445)
at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:249)
at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:453)
at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:250)
at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:140)
at weblogic.wsee.jaxws.HttpServletAdapter$AuthorizedInvoke.run(HttpServletAdapter.java:298)
at weblogic.wsee.jaxws.HttpServletAdapter.post(HttpServletAdapter.java:211)
at weblogic.wsee.jaxws.JAXWSServlet.doPost(JAXWSServlet.java:297)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at weblogic.wsee.jaxws.JAXWSServlet.service(JAXWSServlet.java:87)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at com.accurate.acec.store.StoreIdFilter.doFilter(StoreIdFilter.java:54)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3588)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2200)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2106)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1428)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
Caused by: org.xml.sax.SAXParseException: Premature end of file.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1411)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1058)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at weblogic.xml.jaxp.WebLogicXMLReader.parse(WebLogicXMLReader.java:133)
at weblogic.xml.jaxp.RegistryXMLReader.parse(RegistryXMLReader.java:173)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:211)
... 45 more
aqui esta o xml a ser convertido
<?xml version="1.0" encoding="ISO-8859-1"?>
<transacao id="1" versao="1.1.1" xmlns="http://ecommerce.cbmp.com.br">
<tid>14353DAA001</tid>
<pan>454654664544SaT4OxE=</pan>
<dados-pedido>
<numero>1</numero>
<valor>1</valor>
<moeda>986</moeda>
<data-hora>2011-08-11T18:39:06.578-02:00</data-hora>
<idioma>PT</idioma>
</dados-pedido>
<forma-pagamento>
<bandeira>visa</bandeira>
<produto>A</produto>
<parcelas>1</parcelas>
</forma-pagamento>
<status>0</status>
<url-autenticacao>https://qasecommerce.cielo.com.br/web/index.cbmp?id=bd45c43158ff123c983b8792ff8a4eec</url-autenticacao>
</transacao>
a classe Java
public class CieloPagadorUtil extends PagadorUtil {
private static Logger logger = Logger.getLogger(CieloPagadorUtil.class);
public CieloCreateTransactionResponse createTransaction(CieloCreateTransactionRequest request) throws ServiceExceptionCielo {
System.out.println("createTransaction - CieloCreateTransactionRequest");
RequisicaoNovaTransacao requisicaoNovaTransacao = new RequisicaoNovaTransacao();
requisicaoNovaTransacao.setId("1");
requisicaoNovaTransacao.setVersao("1.1.1");
requisicaoNovaTransacao.setDadosEc(this.getDadosEc());
DadosCartao dadosCartao = new DadosCartao();
dadosCartao.setNumero(request.getPaymentInfo().getEncriptedCardNumber());
dadosCartao.setValidade(String.valueOf( request.getPaymentInfo().getExpirationYear() ) + String.valueOf( request.getPaymentInfo().getExpirationMonth()));
dadosCartao.setIndicador(String.valueOf( request.getPaymentInfo().getStatusVerificationCode()));
dadosCartao.setCodigoSeguranca(String.valueOf( request.getPaymentInfo().getSecurityCode()));
requisicaoNovaTransacao.setDadosPortador(dadosCartao);
DadosPedido dadosPedido = new DadosPedido();
dadosPedido.setNumero( String.valueOf(request.getOrderInfo().getOrderId()) );
dadosPedido.setValor(request.getOrderInfo().getOrderValue().intValue());
dadosPedido.setMoeda(Integer.valueOf(GeneralConfig.getProperty("CKOUT_PAYMENT_CURRENCY_CODE")));
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(new Date());
XMLGregorianCalendar xmlGC = new XMLGregorianCalendarImpl(gc);
dadosPedido.setDataHora(xmlGC);
dadosPedido.setIdioma(IdiomaType.valueOf(GeneralConfig.getProperty("CKOUT_PAYMENT_CIELO_LANGUAGE")));
requisicaoNovaTransacao.setDadosPedido(dadosPedido);
FormaPagamento formaPagamento = new FormaPagamento();
formaPagamento.setBandeira(GeneralConfig.getProperty("CKOUT_PAYMENT_CIELO_BRAND"));
formaPagamento.setProduto("A");
formaPagamento.setParcelas(request.getPaymentInfo().getInstallmentQtt());
requisicaoNovaTransacao.setFormaPagamento(formaPagamento);
requisicaoNovaTransacao.setUrlRetorno(GeneralConfig.getProperty("CKOUT_PAYMENT_CIELO_RETURN_URL")+ request.getOrderInfo().getOrderId());
requisicaoNovaTransacao.setAutorizar(GeneralConfig.getProperty("CKOUT_PAYMENT_CIELO_APPROVAL_MODE"));
requisicaoNovaTransacao.setCapturar(Boolean.getBoolean(GeneralConfig.getProperty("CKOUT_PAYMENT_CIELO_CAPTURE")));
System.out.println("URL " + requisicaoNovaTransacao.getUrlRetorno());
System.out.println("Vai enviarr");
Retorno retorno = this.enviar(requisicaoNovaTransacao);
CieloCreateTransactionResponse response = new CieloCreateTransactionResponse();
response.setTid(retorno.getTid());
response.setAuthenticateUrl(retorno.getUrlAutenticacao());
return response;
}
private Retorno criarRetorno(InputStream xml) throws JAXBException{
System.out.println("criarRetorno");
JAXBContext context = JAXBContext.newInstance(Retorno.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
JAXBElement<? extends Retorno> element = (JAXBElement<? extends Retorno>) unmarshaller.unmarshal(xml);
Retorno retorno = element.getValue();
return retorno;
}
private void clonarInputStream(InputStream isOriginal , InputStream isClonado ){
}
private String criarXML(Mensagem mensagem) throws JAXBException{
System.out.println("criarXML");
JAXBElement<? extends Mensagem > element = null;
if (mensagem instanceof RequisicaoNovaTransacao){
element = new ObjectFactory().createRequisicaoTransacao((RequisicaoNovaTransacao) mensagem);
}
if (mensagem instanceof RequisicaoConsulta){
element = new ObjectFactory().createRequisicaoConsulta((RequisicaoConsulta) mensagem);
}
if (mensagem instanceof RequisicaoCancelamento){
element = new ObjectFactory().createRequisicaoCancelamento((RequisicaoCancelamento) mensagem);
}
if (mensagem instanceof RequisicaoCaptura){
element = new ObjectFactory().createRequisicaoCaptura((RequisicaoCaptura) mensagem);
}
String xml = JAXBUtil.marshall(element, Mensagem.class);
return xml;
}
private Retorno enviar(Mensagem mensagem) throws ServiceExceptionCielo {
System.out.println("ENVIAR");
Retorno retorno = new Retorno();
PostMethod httpMethod = null;
try {
String xml = this.criarXML(mensagem);
System.out.println("XML criar - MEBSAGEM XML: "+xml);
String destino = GeneralConfig.getProperty("CKOUT_PAYMENT_CIELO_URL");
System.out.println("destino - " +destino);
httpMethod = new PostMethod(destino);
httpMethod.addParameter("mensagem", xml);
System.out.println(" entrando -- httpClient ");
System.out.println(System.currentTimeMillis());
HttpClient httpClient = new HttpClient();
httpClient.setHttpConnectionManager(new MultiThreadedHttpConnectionManager());
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(Integer.valueOf(GeneralConfig.getProperty("CKOUT_PAYMENT_CIELO_TIMEOUT")));
httpClient.getHttpConnectionManager().getParams().setSoTimeout(Integer.valueOf(GeneralConfig.getProperty("CKOUT_PAYMENT_CIELO_TIMEOUT")));
System.out.println(" fim -- httpClient ");
System.out.println(" entrando --- stopWatch --");
System.out.println("Timeout inicial " +System.currentTimeMillis());
logger.error("TEMPO INICIO " +System.currentTimeMillis());
StopWatch stopWatch = new StopWatch();
stopWatch.start();
System.out.println(" stopWatch -- start ok ");
httpClient.executeMethod(httpMethod);
System.out.println(" stopWatch -- execute ok ");
stopWatch.stop();
System.out.println(" stopWatch -- stop ok ");
logger.error("Timeout final " +System.currentTimeMillis());
InputStream respostaXml;
respostaXml = httpMethod.getResponseBodyAsStream();
System.out.println("RESPOSTA XML " + httpMethod.getResponseBodyAsString());
retorno = this.criarRetorno(respostaXml);
} catch (HttpException e) {
System.out.println("ERRO "+ e.getMessage());
logger.error(e.getMessage(), e);
e.printStackTrace();
throw new ServiceExceptionCielo("Falha na Requisi��o", null , e);
} catch (IOException e) {
System.out.println("ERRO "+ e.getMessage());
logger.error(e.getMessage(), e);
e.printStackTrace();
throw new ServiceExceptionCielo("Falha na Requisi��o", null , e);
}catch (JAXBException e) {
System.out.println("ERRO "+ e.getMessage());
logger.error(e.getMessage(), e);
e.printStackTrace();
throw new ServiceExceptionCielo("Erro na Requisi��o" , null, e);
} finally {
httpMethod.releaseConnection();
}
return retorno;
}
private DadosEcAutenticacao getDadosEc(){
System.out.println( "Dados EC" );
DadosEcAutenticacao dadosEc = new DadosEcAutenticacao();
dadosEc.setNumero(GeneralConfig.getProperty("CKOUT_PAYMENT_CIELO_NUMBER"));
dadosEc.setChave(GeneralConfig.getProperty("CKOUT_PAYMENT_CIELO_KEY"));
return dadosEc;
}
}
Alguem pode dar uma ajuda?
obrigado