0

WCFサービスとJavaクライアントに問題があります。お時間をいただきありがとうございます。できるだけ多くの情報を提供するよう努めます。

サーバーのエンドポイントはBasicHttpBindingです。サーバーをWindowsサービスとしてIISでホストしようとしましたが、何も変更されていません。奇妙なことに、単純なクラスを使用するとクライアントがうまく機能します。クラスをJAppletに切り替えた瞬間に、問題が発生します。

EclipseをIDEとして使用していますが、AxisとMetroを試して、同じ悪い結果のスタブを生成しました。

これは、すべてが機能しているJavaクラスの例です。

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;
    }
}

エラーが発生するJAppletの例を次に示します。

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;
    }
}

アプレットがロードされた瞬間にエラーが発生しますが、これはまったく同じ呼び出しであるため、アプレットを使用して例外が発生する理由がわかりません。また、Silverlightクライアントからこれを呼び出そうとしましたが、セキュリティ例外が発生していました。ここで、clientaccesspolicy.xmlとcrossdomain.xmlについて知り、clientaccesspolicy.xmlをサービスに追加すると、Silverlightクライアントが正常に機能するためです。 crossdomain.xmlを試してみることを決めましたが、何もしませんでしたが、アプレットはまだ機能しません。最後にスタックトレースを配置します。ありがとうございました。

フアン・ザムディオ

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
4

1 に答える 1

0

例外は明らかに HTTP 405 エラーが原因であるため、クライアントがメソッドを呼び出すことが許可されていないと判断するのはサーバーです。それがアプレットであるか、スタンドアロンの Java アプリケーションであるかは問題ではありません。アプレットとスタンドアロン アプリケーションが異なる IP からサーバーにアクセスしている可能性があります。サーバーは、スタンドアロン アプリが使用する IP からのアクセスを許可するように構成されていますが、アプレットが使用する IP からのアクセスは拒否していますか?

于 2009-11-10T01:34:17.947 に答える