2012-12-21 1 views
2

웹 서비스에서 실제 메시지를받는 데 어려움을 겪고 있습니다.403 오류 대신 실제 웹 서비스 응답을 얻으려면 어떻게해야합니까?

액세스가 정상적으로 작동하지만 이전에 다시 테스트하려고 시도했을 때 AXIS 2가 403 HTTP 오류를 반환했습니다.

org.apache.axis2.AxisFault: Transport error: 403 Error: Forbidden 

나는 그것이 될 일을 생각에 도착, 그래서 SOAP의 UI를 통해 접근을 시도하고 내 인증서가 만료 나에게 보여 주었다.

여기 난 그냥 짧은 가능한 작게 게시물을 유지하기 위해 절단, 내가 SoapUI

The page requires a valid SSL client certificate 
Your client certificate has expired or is not yet valid. A Secure Sockets Layer (SSL) client certificate is used for identifying you as a valid user of the resource. 

메시지에 더 거기에받은 메시지입니다.

OK, 아직 문제가 없습니다. 단지 403 오류 만 표시하는 대신 사용자의 인증서가 만료되었을 수 있음 (또는 다른 오류가 발생했음을 알리는 방법)을 찾아야합니다.

JAX-WS를 사용하여 액세스하려고했는데 같은 메시지가 나타납니다. 예외가 있는지 살펴 보았습니다. 거기에 숨겨진 정보가 있는지 확인했지만 운이 없었습니다. 내가 얻을 것이 이것이다 :

com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 403: Forbidden 
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.checkStatusCode(Unknown Source) 
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(Unknown Source) 
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(Unknown Source) 
at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(Unknown Source) 
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Unknown Source) 
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Unknown Source) 
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Unknown Source) 
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Unknown Source) 
at com.sun.xml.internal.ws.client.Stub.process(Unknown Source) 
at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(Unknown Source) 
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source) 
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source) 
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(Unknown Source) 

누군가가 나에게 내가 진짜 메시지를 얻기 위해 무엇을 할 수 있는지에 대한 몇 가지 포인터를 줄 수 있습니까? 여기에 내가

public static void main(String[] args){ 

    try{ 
     System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol"); 
     Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); 

     System.setProperty("javax.net.ssl.keyStoreType", "PKCS12"); 

     System.clearProperty("javax.net.ssl.keyStore"); 
     System.clearProperty("javax.net.ssl.keyStorePassword"); 
     System.clearProperty("javax.net.ssl.trustStore"); 

     System.setProperty("javax.net.ssl.keyStore", "myCertificatePath"); 
     System.setProperty("javax.net.ssl.keyStorePassword", "myCertificatePassword"); 

     System.setProperty("javax.net.ssl.trustStoreType", "JKS"); 
     System.setProperty("javax.net.ssl.trustStore", "cacertsFilePath"); 

     NfeRecepcao2 nfe = new NfeRecepcao2(); 

     NfeDadosMsg dados = new NfeDadosMsg(); 
     dados.getContent().add(getFileContent("C:\\teste.xml")); 

     NfeCabecMsg cabec = new NfeCabecMsg(); 
     cabec.setCUF("35"); 
     cabec.setVersaoDados("2.00"); 
     Holder<NfeCabecMsg> header = new Holder<NfeCabecMsg>(cabec); 
     NfeRecepcao2Soap12 proxy = nfe.getNfeRecepcao2Soap12(); 
     NfeRecepcaoLote2Result result = proxy.nfeRecepcaoLote2(dados, header); 
     for (Object o : result.getContent()){ 
      System.out.println(o); 
     } 
    } catch (Exception e){ 
     e.printStackTrace(); 
    } 

getFileContent에 액세스하는 데 사용하고 코드는 파일을 열고 그 내용의에서 문자열을 생성합니다.

모든 포인터는 여기에 도움이 될 것입니다. 사전에 모두 감사합니다.

답변

0

어떤 응답을 얻는 지 한 가지 방법은 클라이언트가 보내고받는 비누 요청 및 응답을 기록하는 것입니다.

그런 다음, JAX-WS RI 클라이언트를 사용하고

System.setProperty("Dcom.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump", true); 

JAX-WS RI 라이브러리가 표준으로 포함되어있어 경우 다음

System.setProperty("Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump", true); 

를 JAX-WS를 사용하는 경우 JDK (이것은 Java 6와 함께 사용되었습니다)에서 Sun은 속성 이름의 이름을 'internal'을 포함하도록 변경해야했습니다. 따라서 JDK와 함께 제공되는 JAX-WS RI를 사용하는 경우 속성 이름에 internal을 반드시 추가해야합니다.

관련 문제