2009-11-10 3 views
0

J'ai un problème avec un service WCF et un client Java, je vais essayer de donner autant d'informations que possible, merci pour votre temps. Le point final du serveur est BasicHttpBinding, j'ai essayé d'héberger le serveur en tant que service Windows et dans IIS mais rien n'a changé. La chose étrange est que le client fonctionne très bien si j'utilise une classe simple, au moment où je passe la classe à un JApplet, je reçois le problème mentionné. J'utilise Eclipse comme un IDE, j'ai essayé Axis et Metro pour générer le talon avec les mêmes mauvais résultats.Service WCF, client Java JApplet, erreur de transport 405

Voici un exemple de la classe Java où tout fonctionne

public class TestSoaMetro { 
    public String TestMethod(){ 
     String result = null; 

     IDigitalSignatureService aa = new DigitalSignatureService().getBasicHttpBindingEndpoint(); 
     try { 
      result = aa.getData("1", "id002962"); 
     } catch (IDigitalSignatureServiceGetDataArgumentExceptionFaultFaultMessage e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IDigitalSignatureServiceGetDataInvalidOperationExceptionFaultFaultMessage e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return result; 
    } 
} 

Voici l'exemple du JApplet où je reçois l'erreur:

public class TestSoaMetroApplet extends JApplet { 
    public void init() { 
     Container content = getContentPane(); 
     content.setBackground(Color.white); 
     content.setLayout(new FlowLayout()); 
     String result= this.TestMethod(); 
     JLabel label = new JLabel(result); 
     content.add(label); 
    } 

    public String TestMethod(){ 
     String result = null; 
     IDigitalSignatureService aa = null; 
     try { 
      aa = new DigitalSignatureService().getBasicHttpBindingEndpoint(); 
      result= aa.getData("1", "id002962"); 
     } catch (IDigitalSignatureServiceGetDataArgumentExceptionFaultFaultMessage e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IDigitalSignatureServiceGetDataInvalidOperationExceptionFaultFaultMessage e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return result; 
    } 
} 

Au moment où les charges Applet I obtenir l'erreur, est exactement le même appel, donc je ne comprends pas pourquoi je reçois l'exception en utilisant l'applet. J'ai également essayé de l'appeler depuis un client Silverlight et je recevais une exception de sécurité, c'est là que j'ai découvert clientaccesspolicy.xml et crossdomain.xml, j'ai ajouté clientaccesspolicy.xml au service et le client Silverlight fonctionne très bien, donc je décidé d'essayer crossdomain.xml et rien, l'applet ne fonctionne toujours pas. Je vais mettre la trace de la pile à la fin, merci à tous pour votre temps.

Juan Zamudio

javax.xml.ws.WebServiceException: org.apache.axis2.AxisFault: Transport error: 405 Error: Method not allowed 
at org.apache.axis2.jaxws.ExceptionFactory.createWebServiceException(ExceptionFactory.java:175) 
at org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:70) 
at org.apache.axis2.jaxws.ExceptionFactory.makeWebServiceException(ExceptionFactory.java:128) 
at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.execute(AxisInvocationController.java:559) 
at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.doInvoke(AxisInvocationController.java:118) 
at org.apache.axis2.jaxws.core.controller.impl.InvocationControllerImpl.invoke(InvocationControllerImpl.java:82) 
at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:317) 
at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:159) 
at $Proxy12.getData(Unknown Source) 
at TestSoaMetroApplet.TestMethod(TestSoaMetroApplet.java:28) 
at TestSoaMetroApplet.init(TestSoaMetroApplet.java:19) 
at sun.applet.AppletPanel.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
Caused by: org.apache.axis2.AxisFault: Transport error: 405 Error: Method not allowed 
at org.apache.axis2.transport.http.HTTPSender.handleResponse(HTTPSender.java:295) 
at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:190) 
at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75) 
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:389) 
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:222) 
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:435) 
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402) 
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229) 
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165) 
at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.execute(AxisInvocationController.java:554) 
... 9 more 

Répondre

0

L'exception est évidemment due à une erreur HTTP 405, il est donc le serveur, qui décide que le client ne peut pas invoquer la méthode. Si c'est une applet ou une application Java autonome ne devrait pas vraiment d'importance. L'applet et l'application autonome accèdent peut-être au serveur à partir d'adresses IP différentes et le serveur est configuré pour autoriser l'accès à partir de l'adresse IP utilisée par l'application autonome, mais refuse l'accès à l'adresse IP utilisée par l'applet?

+0

maintenant tous les clients (autonomes et applet) ont la même adresse IP, c'est-à-dire ma machine de débogage, c'est pourquoi est si étrange pour moi. –

+0

L'applet utilise peut-être la configuration proxy du navigateur pour que le serveur voie un autre client. Peut-être (le plus probable), vous trouverez une explication détaillée dans les journaux du serveur pourquoi la demande est refusée. Peut-être que les rayons cosmiques changent les bits dans le registre CPU du serveur, de sorte que la requête échoue. Il est impossible pour quelqu'un de deviner quel est votre problème, si vous ne fournissez aucune information détaillée. – jarnbjo

+0

vous n'avez pas demandé plus d'informations, mais merci quand même, ses trucs comme ça sont à l'écart de ce genre de sites. (en passant, une erreur 405 n'a rien à voir avec la sécurité), –