NFE- Ao enviar NFE gera prefix ns2,3,4[RESOLVIDO]

Pessoal… estou com um problema e não achei a solução ainda…

Estou tentando enviar uma nfe… acho que o webservice mesmo que gera o xml para envio…então incluo um objeto TNFe no msgDados em vez da String com o xml… o problema é que na hora de enviar ele cria um monte de prefix namespace …tipo ns2 ns3 e assim vai…
Olha o meu código



public static void enviar(){
 System.setProperty("com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump", "true");

        ajustaSslCertificadoA1();//ajusta os certificados do cliente e do sefaz

    //cria a mensagem de dados
       NfeDadosMsg nfeDadosMsg = createNfeDadosMsg(arquivoNfe);
//cria o cabeçalho
       Holder<NfeCabecMsg> nfeCabecMsg = new Holder<NfeCabecMsg>(createNfeCabecMsg());

       NfeRecepcao2Soap12 consulta = new NfeRecepcao2().getNfeRecepcao2Soap12();
 //envia e retorna a mensagem de resposta
        NfeRecepcaoLote2Result result = consulta.nfeRecepcaoLote2(nfeDadosMsg,nfeCabecMsg);

}
   private static NfeDadosMsg createNfeDadosMsg(File arquivoNfe) {
        NfeDadosMsg dadosMsg = new NfeDadosMsg();

        LeitorXML leitor = new LeitorXML();
        TNFe tnfe = leitor.lerNFe(arquivoNfe);

        dadosMsg.getContent().add(tnfe);

        return dadosMsg;
    }


      private static NfeCabecMsg createNfeCabecMsg() {
        NfeCabecMsg cabecMsg = new NfeCabecMsg();

		cabecMsg.setCUF( "43");
		cabecMsg.setVersaoDados("2.00");

		return cabecMsg;
    }

Ele cria os dados tudo certo o tnfe também gera correto… mas na hora de criar o soap de envio com a linha NfeRecepcaoLote2Result result = consulta.nfeRecepcaoLote2(nfeDadosMsg,nfeCabecMsg);

ele gera esses xmlns:ns2 e xmlns:ns3 malditos… com isso dá rejeição lá no webService…

alguém já passou por isso?

<?xml version="1.0" ?><S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"><S:Header><nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeRecepcao2" xmlns:ns2="http://www.portalfiscal.inf.br/nfe" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#"><cUF>43</cUF><versaoDados>2.00</versaoDados></nfeCabecMsg></S:Header><S:Body><nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeRecepcao2" xmlns:ns2="http://www.portalfiscal.inf.br/nfe" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#"><ns2:NFe><ns2:infNFe Id="NFe43100894219383000137550010000001231478461232" versao="2.00">
.... Dados pertinentes da nfe
</ns2:NFe></nfeDadosMsg></S:Body></S:Envelope>

Existe algum annotation do jax para que elimin e esses ns2 aí? E se eu em vez de postar o objeto no msgDados postasse uma string como ficaria?

Não é a solução mais elegante, mas resolve.

private void ajustaXml(String file) throws Exception {
		  List<String> dados = new ArrayList<String>();
		  String line = null;  
		  try {
			  FileInputStream stream = new FileInputStream(file);  
			  InputStreamReader streamReader = new InputStreamReader(stream);  
			  BufferedReader reader = new BufferedReader(streamReader);  

			  while((line=reader.readLine())!=null) {
				  line = line.replace(":ns2", "");
				  dados.add(line); 
			  }  

		  } catch (Exception e) {
		  }

		  try {
			  FileWriter writer = new FileWriter(new File(file));
			  PrintWriter saida = new PrintWriter(writer,true);  
			  for (String linha : dados) {
				  saida.println(linha);
			  }
			  saida.close();  
			  writer.close();  		} 
		  catch (IOException e) {
			  e.printStackTrace();
		  }
	  }

mas é o próprio comando

que gera esse maldito soap… , já tentei criar o cabeçalho na mão e postar dentro do nfedadosmsg… e na hora de enviar aparece denovo os malditos ns2,3…

Depois que gravar o arquivo xml, troque o conteúdo que você não quer por espaço.

while((line=reader.readLine())!=null) {
				  line = line.replace(":ns2", "");
				  dados.add(line); 
			  }  

Repetindo: essa é uma solução rápida até você achar outra melhor.

Obrigado pela ajuda, mas o xml é gerado no momento do envio pelas classes geradas pelo wsdl,não gera arquivo e nem tenho acesso ao xml gerado para poder trocar algo nele…mas resolvi…tinha gerado as classes pelo jaxb do netbeans mesmo… então percebi que tenho que colocar os beans dentro dos pacotes das mesmas classes geradas pelos wsdl… assim funciona… e não gera esses malditos ns2… a vantagem de gerar essas classes pelo netbeans é que é só dois ou tres cliques e tá tudo gerado…não prescisa baixar bibliotecas instalar isso ou aquilo, fazer código para geração bla bla bla… a desvantagem é que as vezes acontecem essas coisas malucas fora algumas modificações que se tem que fazer… além de gerar algumas classes que … pra variar o jaxb não gera… e até se descobrir isso, perde muito tempo…isso se for que nem eu…que mecheu poucas vezes com o jaxb…