java - How make JAXB generate XML correctly? -
i'm trying consume webservice uses 2 namespaces in soap request, doesn't take prefix. i'm using cxf generate client , data-binding. when using jaxb default data-binding message sent web service's server:
<soap:envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:header> <nfecabecmsg xmlns:ns2="http://www.portalfiscal.inf.br/nfe" xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/nfestatusservico2"> <cuf>31</cuf> <versaodados>2.00</versaodados> </nfecabecmsg> </soap:header> <soap:body> <nfedadosmsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/nfestatusservico2" xmlns:ns2="http://www.portalfiscal.inf.br/nfe"> <ns2:consstatserv versao="2.00"> <ns2:tpamb>2</ns2:tpamb> <ns2:cuf>31</ns2:cuf> <ns2:xserv>status</ns2:xserv> </ns2:consstatserv> </nfedadosmsg> </soap:body> </soap:envelope> but isn't format server expects. using xmlbean default data-binding can generate correctly message (as server expects):
<soap:envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:header> <nfecabecmsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/nfestatusservico2"> <cuf>31</cuf> <versaodados>2.00</versaodados> </nfecabecmsg> </soap:header> <soap:body> <nfedadosmsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/nfestatusservico2"> <consstatserv xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"> <tpamb>2</tpamb> <cuf>31</cuf> <xserv>status</xserv> </consstatserv> </nfedadosmsg> </soap:body> </soap:envelope> however, i'm affraid using xmlbeans, of import part of software developed using jaxb, need alter xmlbeans. after i've saw lastly release of xmlbeans in 2012 i'm not confident xmlbeans supported in future. there way can generate message correctly using jaxb??
update
this wsdl of web service:
<?xml version="1.0" encoding="utf-8"?> <wsdl:definitions xmlns:s="http://www.w3.org/2001/xmlschema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="http://www.portalfiscal.inf.br/nfe/wsdl/nfestatusservico2" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetnamespace="http://www.portalfiscal.inf.br/nfe/wsdl/nfestatusservico2" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:types> <s:schema elementformdefault="qualified" targetnamespace="http://www.portalfiscal.inf.br/nfe/wsdl/nfestatusservico2"> <s:element name="nfedadosmsg"> <s:complextype mixed="true"> <s:sequence> <s:any/> </s:sequence> </s:complextype> </s:element> <s:element name="nfestatusserviconf2result"> <s:complextype mixed="true"> <s:sequence> <s:any/> </s:sequence> </s:complextype> </s:element> <s:element name="nfecabecmsg" type="tns:nfecabecmsg"/> <s:complextype name="nfecabecmsg"> <s:sequence> <s:element minoccurs="0" maxoccurs="1" name="cuf" type="s:string"/> <s:element minoccurs="0" maxoccurs="1" name="versaodados" type="s:string"/> </s:sequence> <s:anyattribute/> </s:complextype> </s:schema> </wsdl:types> <wsdl:message name="nfestatusserviconf2soap12in"> <wsdl:part name="nfedadosmsg" element="tns:nfedadosmsg"/> </wsdl:message> <wsdl:message name="nfestatusserviconf2soap12out"> <wsdl:part name="nfestatusserviconf2result" element="tns:nfestatusserviconf2result"/> </wsdl:message> <wsdl:message name="nfestatusserviconf2nfecabecmsg"> <wsdl:part name="nfecabecmsg" element="tns:nfecabecmsg"/> </wsdl:message> <wsdl:porttype name="nfestatusservico2soap12"> <wsdl:operation name="nfestatusserviconf2"> <wsdl:input message="tns:nfestatusserviconf2soap12in"/> <wsdl:output message="tns:nfestatusserviconf2soap12out"/> </wsdl:operation> </wsdl:porttype> <wsdl:binding name="nfestatusservico2soap12" type="tns:nfestatusservico2soap12"> <soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="nfestatusserviconf2"> <soap12:operation soapaction="http://www.portalfiscal.inf.br/nfe/wsdl/nfestatusservico2/nfestatusserviconf2" style="document"/> <wsdl:input> <soap12:body use="literal"/> <soap12:header message="tns:nfestatusserviconf2nfecabecmsg" part="nfecabecmsg" use="literal"/> </wsdl:input> <wsdl:output> <soap12:body use="literal"/> <soap12:header message="tns:nfestatusserviconf2nfecabecmsg" part="nfecabecmsg" use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="nfestatusservico2"> <wsdl:port name="nfestatusservico2soap12" binding="tns:nfestatusservico2soap12"> <soap12:address location="https://nfe.sefazvirtual.rs.gov.br/ws/nfestatusservico/nfestatusservico2.asmx"/> </wsdl:port> </wsdl:service> </wsdl:definitions> these relevant schemas used create consstatserv tag:
<?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:xs="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.portalfiscal.inf.br/nfe" elementformdefault="qualified" attributeformdefault="unqualified"> <xs:include schemalocation="leiauteconsstatserv_v2.00.xsd"/> <xs:element name="consstatserv" type="tconsstatserv"> <xs:annotation> <xs:documentation>schema xml de validação pedido de consulta status serviço</xs:documentation> </xs:annotation> </xs:element> </xs:schema> <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:xs="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.portalfiscal.inf.br/nfe" elementformdefault="qualified" attributeformdefault="unqualified"> <xs:include schemalocation="tiposbasico_v1.03.xsd"/> <xs:complextype name="tconsstatserv"> <xs:annotation> <xs:documentation>tipo pedido de consulta status serviço</xs:documentation> </xs:annotation> <xs:sequence> <xs:element name="tpamb" type="tamb"> <xs:annotation> <xs:documentation>identificação ambiente: 1 - produção 2 - homologação </xs:documentation> </xs:annotation> </xs:element> <xs:element name="cuf" type="tcodufibge"> <xs:annotation> <xs:documentation>sigla da uf consultada</xs:documentation> </xs:annotation> </xs:element> <xs:element name="xserv"> <xs:annotation> <xs:documentation>serviço solicitado</xs:documentation> </xs:annotation> <xs:simpletype> <xs:restriction base="tserv"> <xs:enumeration value="status"/> </xs:restriction> </xs:simpletype> </xs:element> </xs:sequence> <xs:attribute name="versao" type="tverconsstatserv" use="required"/> </xs:complextype> <xs:complextype name="tretconsstatserv"> <xs:annotation> <xs:documentation>tipo resultado da consulta status serviço</xs:documentation> </xs:annotation> <xs:sequence> <xs:element name="tpamb" type="tamb"> <xs:annotation> <xs:documentation>identificação ambiente: 1 - produção 2 - homologação </xs:documentation> </xs:annotation> </xs:element> <xs:element name="veraplic" type="tveraplic"> <xs:annotation> <xs:documentation>versão aplicativo que processou nf-e</xs:documentation> </xs:annotation> </xs:element> <xs:element name="cstat" type="tstat"> <xs:annotation> <xs:documentation>código status da mensagem enviada.</xs:documentation> </xs:annotation> </xs:element> <xs:element name="xmotivo" type="tmotivo"> <xs:annotation> <xs:documentation>descrição literal status serviço solicitado.</xs:documentation> </xs:annotation> </xs:element> <xs:element name="cuf" type="tcodufibge"> <xs:annotation> <xs:documentation>código da uf responsável pelo serviço</xs:documentation> </xs:annotation> </xs:element> <xs:element name="dhrecbto" type="xs:datetime"> <xs:annotation> <xs:documentation>aaaa-mm-ddthh:mm:ss</xs:documentation> </xs:annotation> </xs:element> <xs:element name="tmed" type="tmed" minoccurs="0"> <xs:annotation> <xs:documentation>tempo médio de resposta serviço (em segundos) dos últimos 5 minutos </xs:documentation> </xs:annotation> </xs:element> <xs:element name="dhretorno" type="xs:datetime" minoccurs="0"> <xs:annotation> <xs:documentation>aaaa-mm-ddthh:mm:ssdeve ser preenchida com info e hora previstas para o retorno dos serviços prestados. </xs:documentation> </xs:annotation> </xs:element> <xs:element name="xobs" type="tmotivo" minoccurs="0"> <xs:annotation> <xs:documentation>campo observação utilizado para incluir informações ao contribuinte </xs:documentation> </xs:annotation> </xs:element> </xs:sequence> <xs:attribute name="versao" type="tverconsstatserv" use="required"/> </xs:complextype> <xs:simpletype name="tverconsstatserv"> <xs:annotation> <xs:documentation>tipo versão leiuate da consulta status serviço 2.00</xs:documentation> </xs:annotation> <xs:restriction base="xs:token"> <xs:pattern value="2\.00"/> </xs:restriction> </xs:simpletype> </xs:schema>
you might want play http://docs.oracle.com/javaee/5/api/javax/xml/bind/annotation/xmlelement.html annotation on elements of generated classes. has namespace parameter you'll interested in. had similar issue before , able create work manual updates.
see jaxb: how annotate classes belong different namespaces?
java web-services cxf jaxb2 xmlbeans
No comments:
Post a Comment