2011-07-12 6 views
3

Apache CXFに問題があります。 "重複デフォルトの名前空間宣言" 例外を発生させたApache CXF:重複したデフォルト名前空間宣言

<consStatServ xmlns:ns2="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2" xmlns="" xmlns="" xmlns:ns5="http://www.portalfiscal.inf.br/nfe" versao="2.00"> 

:この中へ

<consStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"> 

:基本的には、これを回しています。

これは私のSpring構成である:

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" 
xmlns:sec="http://cxf.apache.org/configuration/security" xmlns:http="http://cxf.apache.org/transports/http/configuration" 
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:cxf="http://cxf.apache.org/core" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context.xsd 
     http://www.springframework.org/schema/tx 
     http://www.springframework.org/schema/tx/spring-tx.xsd 
     http://cxf.apache.org/configuration/security 
     http://cxf.apache.org/schemas/configuration/security.xsd 
     http://cxf.apache.org/jaxws 
     http://cxf.apache.org/schemas/jaxws.xsd 
     http://cxf.apache.org/transports/http/configuration 
     http://cxf.apache.org/schemas/configuration/http-conf.xsd 
     http://cxf.apache.org/core 
     http://cxf.apache.org/schemas/core.xsd"> 

<jaxws:client id="nfeStatusServicoMGWebService" 
    serviceClass="com.ats.nfe.webservice.mg.NfeStatusServico2Soap12" 
    address="https://hnfe.fazenda.mg.gov.br/nfe2/services/NfeStatus2"> 
    <jaxws:inInterceptors> 
     <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"> 
     </bean> 
    </jaxws:inInterceptors> 
    <jaxws:outInterceptors> 
     <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"> 
     </bean> 
    </jaxws:outInterceptors> 
</jaxws:client> 


<http:conduit 
    name="{http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2}NfeStatusServico2Soap12Port.http-conduit"> 

    <http:tlsClientParameters> 
     <sec:keyManagers keyPassword="password"> 
      <sec:keyStore type="JKS" password="123456" 
       file="C:/Documents and Settings/HaroldoOliveira/teste.jks" /> 
     </sec:keyManagers> 
     <sec:trustManagers> 
      <sec:keyStore type="JKS" password="123456" 
       file="C:/Documents and Settings/HaroldoOliveira/truststore_nfe.jks" /> 
     </sec:trustManagers> 
     <sec:cipherSuitesFilter> 
      <!-- these filters ensure that a ciphersuite with export-suitable or 
       null encryption is used, but exclude anonymous Diffie-Hellman key change 
       as this is vulnerable to man-in-the-middle attacks --> 
      <sec:include>.*_EXPORT_.*</sec:include> 
      <sec:include>.*_EXPORT1024_.*</sec:include> 
      <sec:include>.*_WITH_DES_.*</sec:include> 
      <sec:include>.*_WITH_NULL_.*</sec:include> 
      <sec:exclude>.*_DH_anon_.*</sec:exclude> 
     </sec:cipherSuitesFilter> 
    </http:tlsClientParameters> 
    <http:client AutoRedirect="true" Connection="Keep-Alive" /> 

</http:conduit> 

<cxf:bus> 
    <cxf:features> 
     <cxf:logging/> 
    </cxf:features> 
</cxf:bus> 

そして、これは私のテストコードです:

public class NFeCXFTest { 

private static String XML_TESTE_STATUS = 
    "<consStatServ xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"2.00\">" + 
    " <tpAmb>2</tpAmb>" + 
    " <cUF>31</cUF>" + 
    " <xServ>STATUS</xServ>" + 
    "</consStatServ>"; 


private NfeStatusServico2Soap12 statusServ; 

@Test 
public void commitNfeStatusServicoNF() { 
    NfeCabecMsg cabec = new NfeCabecMsg(); 
    cabec.setCUF("31"); 
    cabec.setVersaoDados("2.00"); 

    NfeDadosMsg dados = new NfeDadosMsg(); 
    try { 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     InputSource is = new InputSource(); 
     is.setCharacterStream(new StringReader(XML_TESTE_STATUS)); 
     Document contentDoc = db.parse(is); 
     dados.getContent().add(contentDoc.getDocumentElement()); 
    } catch (ParserConfigurationException e) { 
     throw new IllegalArgumentException("Erro ao empacotar o conteúdo, ", e); 
    } catch (SAXException e) { 
     throw new IllegalArgumentException("Erro ao empacotar o conteúdo, ", e); 
    } catch (IOException e) { 
     throw new IllegalArgumentException("Erro ao empacotar o conteúdo, ", e); 
    }   

    NfeStatusServicoNF2Result ret = this.statusServ.nfeStatusServicoNF2(dados, cabec); 
    Object retVal = ret.getContent().iterator().next(); 
    System.out.println(retVal.getClass()); 
    System.out.println("***.***.***"); 

    try { 
     Result stringResult = new StringResult(); 
     TransformerFactory tFactory = TransformerFactory.newInstance(); 
     Transformer transformer = tFactory.newTransformer(); 
     transformer.transform(new DOMSource((Node)retVal), stringResult); 
     System.out.println("O retorno é: " + stringResult); 
    } catch (TransformerException e) { 
     throw new IllegalArgumentException("Impossível gerar nova requisição, ", e); 
    } 
} 

@Resource(name="nfeStatusServicoMGWebService") 
public void setStatusServ(NfeStatusServico2Soap12 statusServ) { 
    this.statusServ = statusServ; 
} 

}

私が間違ってやっている上の任意のアイデア?私は適切にメッセージをシリアル化しませCXFの問題を見てきましたし、私がCXFトランス機能を使用していた

はDocument.normalizeDocument()

答えて