Mensagens enviadas por: dsmdanbr
Índice dos Fóruns » Perfil de dsmdanbr » Mensagens enviadas por dsmdanbr
Autor Mensagem
A aplicação é web e multi-empresa, quando o usuário está logado, já esta amarrado ao certificado.
O problema eh justamente conseguir dentre os três certificados, conseguir selecionar um.
Porque quando carrego o provedor:

p = new sun.security.pkcs11.SunPKCS11(configName);
KeyStore ks = KeyStore.getInstance("pkcs11", p);
ks.load(null, senha.toCharArray());

a aplicação não esta carregando dos três certificados, somente do primeiro SmartCard, aí não tem como
eu escolher. Se eu deixar somente o certificado específico, e tirar os outros dois, funciona de boa.
Estou tendo uma dificuldade em carregar um certificado determinado pela aplicação quando
no servidor estão instalados 2 ou mais certificados, cada um, em diferentes dispositivos físicos (2 SmartCard e 1 Token).



A aplicação sempre retorna um certificado, apesar de terem dois ou mais instalados no servidor.


Eu esperava que o método ks.aliases() retornasse todos os certificados:


Alguém pode me ajudar?
Eu consegui colocar os Cabeçalhos gerado pelo JAX WS.

Usei o wsimport no pacote lib da java com o parâmetro: -XadditionalHeaders
"leverage SunRI tool (wsimport), which starting from v. 2.1.3 has a new option -XadditionalHeaders that map additional headers in wsdl:binding section as method parameters."
http://community.jboss.org/thread/102562

O código ficou assim:

TConsStatServ ct = new br.inf.portalfiscal.cte.ObjectFactory().createTConsStatServ();
ct.setVersao("1.03");
ct.setTpAmb("1");
ct.setXServ("STATUS");
CteDadosMsg dados = new CteDadosMsg();
dados.getContent().add(ct);

Holder<CteCabecMsg> cabDados = new Holder<CteCabecMsg>();
cabDados.value = new CteCabecMsg();
cabDados.value.setCUF("29");
cabDados.value.setVersaoDados("1.03");

CteStatusServico status = new CteStatusServico();
CteStatusServicoSoap12 soap = status.getCteStatusServicoSoap12();
CteStatusServicoCTResult result = soap.cteStatusServicoCT(dados, cabDados);

System.out.println(result.getContent().size());
JAXBElement el = (JAXBElement) result.getContent().get(0);
TRetConsStatServ retorno = (TRetConsStatServ) el.getValue();
System.out.println(retorno.getXMotivo());
System.out.println(retorno.getXObs());



dsmdanbr wrote:Tentei com o axis 2 no NetBeans, mais não tive muito sucesso!!!
Usei esse tutorial pra instalar: http://netbeans.org/kb/docs/websvc/gs-axis.html
As classe geradas pelo Axis 2 foram diferentes, e não tenho muito tempo para estudar e
testar...

vm wrote:Foi gerado com axis1.
O header o axis seta é so jogar o objeto de cabecalho.

Sds
Tentei com o axis 2 no NetBeans, mais não tive muito sucesso!!!
Usei esse tutorial pra instalar: http://netbeans.org/kb/docs/websvc/gs-axis.html
As classe geradas pelo Axis 2 foram diferentes, e não tenho muito tempo para estudar e
testar...

vm wrote:Foi gerado com axis1.
O header o axis seta é so jogar o objeto de cabecalho.

Sds
Oi Michel, muito bom seu exemplo.
Vc gerou as classes java do *.wsdl com axis?
Poderia postar um exemplo?

Ou então postar o método setHeader() do soap(CteStatusServicoSoap12Stub),
porque ai colocaria manualmente mesmo. Eu gerei as classes atraves do JAX-WS.

Vlw, obrigado.

vm wrote:Boa noite

Bom, acredito que não tenham conhecimento e precise de ajuda da um grito.

Quando sobrar uns minutos posto a solução passo-a-passo, mas deixo o codigo.



O Xml da mensagem gerado pelo axis:




O Envelope:



E o retorno:



Caso precisem de mais alguma informação não exite, peça.

Aqui todos se ajudam!

(51) 9304 8042
michelvalent@gmail.com
Caso possa esperar farei um tutorial da nfe e da cte completo.

Caso haja alguem com interesse em patrocinar também é bem vindo.


Alguém sabe como criar um XMLGregorianCalendar que gere a data no formato 22/10/2009?

Estou tendo o seguinte problema:



Error: cvc-pattern-valid: Value '2009-10-22' is not facet-valid with respect to pattern '[0-9]{2}/[0-9]{2}/[0-9]{4}' for type 'st_data'.

Porque a data está saindo no XML assim '2009-10-22'.

Parece que não tem como mudar esse padrão no XMLGregorianCalendar.
A saída padrão seria: 1976-12-22T00:00:00.000+01:00
Só tem como ocultar alguns campos.
http://blog.jonasbandi.net/2009/05/jaxb-quicktip-xmlgregoriancalendar.html
dsmdanbr wrote:
viniciuspadua wrote:colocar o prefixo vai depender da sua codificação: para mim fiz assim:



com isso ao gerar o xml ja vai com o namespace!



Então, no caso isso seria caso tivesse gerado o xml item por item não é isso?
Porque eu instanciei um objeto MensagemTISS setei os campos e salvei ele em XML
através da JAXB.

Olha como ficou o código de teste:

ObjectFactory objFactory = new ObjectFactory();
MensagemTISS mensagem = new MensagemTISS();
mensagem.setCabecalho(new CabecalhoTransacao());
mensagem.getCabecalho().setVersaoPadrao("2.02.01");
mensagem.getCabecalho().setIdentificacaoTransacao(new CabecalhoTransacao.IdentificacaoTransacao());
mensagem.getCabecalho().getIdentificacaoTransacao().setTipoTransacao(StTipoTransacao.ENVIO_LOTE_GUIAS);
mensagem.getCabecalho().getIdentificacaoTransacao().setSequencialTransacao(new BigInteger("1"));
mensagem.setPrestadorParaOperadora(new MensagemTISS.PrestadorParaOperadora());
mensagem.getPrestadorParaOperadora().setLoteGuias(ctLoteGuias);

//mensagem.setCabecalho(new CabecalhoTransacao());
mensagem.setEpilogo(objFactory.createMensagemTISSEpilogo());
mensagem.getEpilogo().setHash("0");

MensagemTiss mTiss = new MensagemTiss();
try {
mTiss.setDocumentoMensagem(mensagem);
} catch (Exception e) {
e.printStackTrace();
}
mensagem.getEpilogo().setHash(mTiss.getHashCalculado());

try {
JAXBContext jc = JAXBContext.newInstance("br.gov.ans.padroes.tiss.schemas.v20201");
Marshaller m = jc.createMarshaller();
m.setProperty(m.JAXB_ENCODING, "ISO-8859-1");
m.setProperty(m.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(mensagem, new FileOutputStream("d:/a.xml"));

Unmarshaller unmarshaller = jc.createUnmarshaller();
File file = new File("d:/a.xml");
mensagem = (MensagemTISS) unmarshaller.unmarshal(new FileInputStream(file.getAbsolutePath()));

String mensagemTxt = security.log.util.LogUtil.readFile(file).replace("http://www.ans.gov.br/padroes/tiss/schemas/v20201", "http://www.ans.gov.br/padroes/tiss/schemas");
file.createNewFile();
FileWriter output = new FileWriter(file);
BufferedWriter bufOutput = new BufferedWriter(output);
bufOutput.write(mensagemTxt);
bufOutput.close();

MensagemTiss mensagemTiss = new MensagemTiss(file.getAbsolutePath());
System.out.println(mensagemTiss.getHashCalculado());

} catch (JAXBException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}

Entendeu? Não teria como eu setar o prefixo através da JAXB?

Obrigado.



Consegui colocar o prefixo, tem até um exemplo na página 6.





Referência: http://www.j2ee.me/webservices/docs/2.0/jaxb/vendorProperties.html

Obrigado.
viniciuspadua wrote:colocar o prefixo vai depender da sua codificação: para mim fiz assim:



com isso ao gerar o xml ja vai com o namespace!



Então, no caso isso seria caso tivesse gerado o xml item por item não é isso?
Porque eu instanciei um objeto MensagemTISS setei os campos e salvei ele em XML
através da JAXB.

Olha como ficou o código de teste:

ObjectFactory objFactory = new ObjectFactory();
MensagemTISS mensagem = new MensagemTISS();
mensagem.setCabecalho(new CabecalhoTransacao());
mensagem.getCabecalho().setVersaoPadrao("2.02.01");
mensagem.getCabecalho().setIdentificacaoTransacao(new CabecalhoTransacao.IdentificacaoTransacao());
mensagem.getCabecalho().getIdentificacaoTransacao().setTipoTransacao(StTipoTransacao.ENVIO_LOTE_GUIAS);
mensagem.getCabecalho().getIdentificacaoTransacao().setSequencialTransacao(new BigInteger("1"));
mensagem.setPrestadorParaOperadora(new MensagemTISS.PrestadorParaOperadora());
mensagem.getPrestadorParaOperadora().setLoteGuias(ctLoteGuias);

//mensagem.setCabecalho(new CabecalhoTransacao());
mensagem.setEpilogo(objFactory.createMensagemTISSEpilogo());
mensagem.getEpilogo().setHash("0");

MensagemTiss mTiss = new MensagemTiss();
try {
mTiss.setDocumentoMensagem(mensagem);
} catch (Exception e) {
e.printStackTrace();
}
mensagem.getEpilogo().setHash(mTiss.getHashCalculado());

try {
JAXBContext jc = JAXBContext.newInstance("br.gov.ans.padroes.tiss.schemas.v20201");
Marshaller m = jc.createMarshaller();
m.setProperty(m.JAXB_ENCODING, "ISO-8859-1");
m.setProperty(m.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(mensagem, new FileOutputStream("d:/a.xml"));

Unmarshaller unmarshaller = jc.createUnmarshaller();
File file = new File("d:/a.xml");
mensagem = (MensagemTISS) unmarshaller.unmarshal(new FileInputStream(file.getAbsolutePath()));

String mensagemTxt = security.log.util.LogUtil.readFile(file).replace("http://www.ans.gov.br/padroes/tiss/schemas/v20201", "http://www.ans.gov.br/padroes/tiss/schemas");
file.createNewFile();
FileWriter output = new FileWriter(file);
BufferedWriter bufOutput = new BufferedWriter(output);
bufOutput.write(mensagemTxt);
bufOutput.close();

MensagemTiss mensagemTiss = new MensagemTiss(file.getAbsolutePath());
System.out.println(mensagemTiss.getHashCalculado());

} catch (JAXBException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}

Entendeu? Não teria como eu setar o prefixo através da JAXB?

Obrigado.
viniciuspadua wrote:ja passo o arquivo xml com todos os dados.
e o JAXB ja faz os get set na classe!

se conseguir enviar para algum web services e não der problema de hash me avise!


Vinicius e pessoal do fórum,

Consegui gerar o arquivo xml, e calcular o hash, desculpa ai pelas perguntas simples,
é que não deu tempo estudar bem o material passado pela ANS, tive que tentar fazer
natoralmente... hehehehehe. Mais a ajuda do fórum foi essencial.

Estou com dúvida agora como colocar o prefixo da ans no arquivo xml.

Olha como ficou o arquivo xml:

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<mensagemTISS xmlns="http://www.ans.gov.br/padroes/tiss/schemas">
<cabecalho>
<identificacaoTransacao>
<tipoTransacao>ENVIO_LOTE_GUIAS</tipoTransacao>
<sequencialTransacao>1</sequencialTransacao>
</identificacaoTransacao>
<versaoPadrao>V2_02_01</versaoPadrao>
</cabecalho>
<prestadorParaOperadora>
<loteGuias>
<numeroLote>124578</numeroLote>
<guias>
<guiaFaturamento>
<guiaSP_SADT>
<dadosAutorizacao>
<senhaAutorizacao>995739</senhaAutorizacao>
</dadosAutorizacao>
<dadosBeneficiario>
<numeroCarteira>1642028023161906</numeroCarteira>
<nomeBeneficiario>Arthur Alves Oliveira</nomeBeneficiario>
<nomePlano>Unimed</nomePlano>
<numeroCNS></numeroCNS>
</dadosBeneficiario>
<dadosSolicitante>
<contratado>
<identificacao>
<CNPJ>40610681000886</CNPJ>
<codigoPrestadorNaOperadora>40616682000186</codigoPrestadorNaOperadora>
</identificacao>
<nomeContratado>Teste Nome Empresa</nomeContratado>
<enderecoContratado>
<tipoLogradouro>Av.</tipoLogradouro>
<logradouro>Juracy Magalhães</logradouro>
<numero>1200</numero>
<codigoIBGEMunicipio>293330</codigoIBGEMunicipio>
<municipio>Vitória da Conquista</municipio>
<codigoUF>BA</codigoUF>
<cep>45.100-000</cep>
</enderecoContratado>
<numeroCNES>1770545</numeroCNES>
</contratado>
<profissional>
<nomeProfissional>Juscilene Silva Leao</nomeProfissional>
<conselhoProfissional>
<siglaConselho>CRM</siglaConselho>
<numeroConselho>12834</numeroConselho>
</conselhoProfissional>
</profissional>
</dadosSolicitante>
<caraterAtendimento>E</caraterAtendimento>
<diagnosticoAtendimento>
<CID>
<nomeTabela>CID-10</nomeTabela>
<codigoDiagnostico>R43</codigoDiagnostico>
</CID>
<indicadorAcidente>Outros</indicadorAcidente>
</diagnosticoAtendimento>
</guiaSP_SADT>
</guiaFaturamento>
</guias>
</loteGuias>
</prestadorParaOperadora>
<epilogo>
<hash>a77b013c5a940786e76be63b2bc8c1bc</hash>
</epilogo>
</mensagemTISS>


Está sem o prefixo da ANS!!!

Desde já obrigado.
Fala Vinícius,

Então, só pude testar agora o exemplo que vc respondeu no Fórum.
Tenho a seguinte dúvida:

- Quando vc carrega um objeto File através do caminho de "arquivo",
esse arquivo está em branco ou já segue com algum conteúdo padrão?

String arquivo = "c:/1466_2f4f7f75c65edae68496f965962337a6.xml";
File file = new File(arquivo);


- Vi a estrutura da classe MensagemTiss na documentação, no caso, como gostaria de adicionar a partir dela
Guias de SP/SADT, teria que setar "prestadorParaOperadora", dentro do objeto MensagemTISS.PrestadorParaOperadora
teria que setar "loteGuias", dentro do objeto CtLoteGuias teria que setar "guias", ..., até setar as guias campo por campo.
Alguém teria algum exemplo de um código setando várias guias?
Além de setar o Hash, o que mais eu devo ficar atento?

Obrigado!!!

viniciuspadua wrote:dsmdanbr, acho que consegui oque tava querendo!

veja abaixo!
viniciuspadua wrote:dsmdanbr, acho que consegui oque tava querendo!

veja abaixo!


Velho, muito obrigado, vou testar aqui, qualquer dúvida já posto.
viniciuspadua wrote:dsmdanbr onde encontrou o esse tópico q se referiu ?


Na página 1.
rbamartins wrote:Iai pessoal, alguma novidade que valha a pena ser divulgada?



Rafael,
Você falou em um tópico anterior:
"Utilizar a própria estrutura do Tiss, usando sua lib e instanciando
um objeto do tipo MensagemTISS você consegue obter todos os campos necessários no XML."

No caso, você citou sobre a utilização da lib do TissNet para leitura de um arquivo xml pronto.
É possível instanciar o objeto MensagemTISS, setar as informações por exemplo de uma guia SP/SADT,
e a partir daí gerar o arquivo xml para a Operadora?

Desde já, obrigado.
 
Índice dos Fóruns » Perfil de dsmdanbr » Mensagens enviadas por dsmdanbr
Ir para:   
Powered by JForum 2.1.8 © JForum Team