Os namespaces a mais não serão criados a menos que sejam explicitamente necessários… qual sua necessidade?
[]'s
nathanpsouza
Eles são necessários para que a chamada ao web service seja válida (coisas da oracle). De fato, eu realmente preciso deles adicionados a mensagem, e não sei como adicioná-los
@edit
Eu estou trabalhando em uma integração de um sistema próprio com o FusionCRM, e, após ter aberto uma service request, o time de suporte da oracle, me informou que esses namespaces são de fato, necessários.
Alexandre_Saudate
Então, você pode criar um handler customizado no cliente do seu serviço para fazer este tratamento. Você pode dar uma googlada por “JAX-WS Handlers” ou checar aqui -> http://www.jroller.com/gmazza/entry/jaxws_handler_tutorial como se faz isso.
Curiosidade: não conheço o Fusion CRM… é algum nome novo para um JD Edwards da vida, ou é um produto novo?
Tentei adicionar os namespaces da seguinte forma, mas ainda não funciona da forma esperada
importjava.util.Set;importjavax.xml.namespace.QName;importjavax.xml.soap.SOAPException;importjavax.xml.soap.SOAPMessage;importjavax.xml.ws.ProtocolException;importjavax.xml.ws.handler.MessageContext;importjavax.xml.ws.handler.soap.SOAPHandler;importjavax.xml.ws.handler.soap.SOAPMessageContext;/* * To change this template, choose Tools | Templates * and open the template in the editor. *//** * * @author nathan */publicclassMySoapHandlerimplementsSOAPHandler<SOAPMessageContext>{@OverridepublicbooleanhandleMessage(SOAPMessageContextmessageContext){// if (Boolean.TRUE.equals(messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY))) {// HandlerUtils.printMessageContext("Client SOAPHandler", messageContext);SOAPMessagesoapMessage=messageContext.getMessage();try{soapMessage.getSOAPPart().getEnvelope().addNamespaceDeclaration("ns0","http://xmlns.oracle.com/adf/svc/types/");soapMessage.getSOAPPart().getEnvelope().addNamespaceDeclaration("ns1","/oracle/apps/sales/custExtn/views/common/");soapMessage.getSOAPPart().getEnvelope().addNamespaceDeclaration("ns2","http://xmlns.oracle.com/apps/sales/custExtn/extnService/types/");soapMessage.getSOAPPart().getEnvelope().addNamespaceDeclaration("xsi","http://www.w3.org/2001/XMLSchema-instance");soapMessage.saveChanges();}catch(SOAPExceptione){thrownewProtocolException(e);}// }returntrue;}@OverridepublicbooleanhandleFault(SOAPMessageContextcontext){returntrue;}@Overridepublicvoidclose(MessageContextcontext){}@OverridepublicSet<QName>getHeaders(){returnnull;}}
Configurei esse handler pelo próprio netbeans, mas a mensagem continua incorreta
@edit
A muito tempo atrás eu usei um software chamado tcpmon, para pegar a mensagem soap que era enviada. O que se usa nos dias atuais para ter acesso a mensagem?
Alexandre_Saudate
Se não me engano, depois de mexer na mensagem você tem que ajustá-la de volta no contexto. Mas é só um palpite, não lembro de cabeça como isso funciona.
Quanto ao que você pode usar, eu, pelo menos, costumo usar o wireshark nessas situações. Mas só tem pra Windows e Mac =(
[]'s
nathanpsouza
Bom, vou pesquisar sobre como colocar a mensagem de volta no contexto.
Vou baixar o wireshark também
@edit
É possível usar o hireshark para debugar web services em uma conexão segura (https)?
Alexandre_Saudate
Em conexão segura, não. Ele até intercepta os pacotes, mas tudo o que você vai conseguir ver serão dados criptografados.
[]'s
nathanpsouza
puts, o serviço que estou tentando consumir é com conexão criptografada
Alexandre_Saudate
Tente pegar o WSDL e expôr um mock pelo SoapUI. Assim, você vai ter condições melhores para testar, inclusive.