0

https 経由で xfire クライアントから ws-security (ユーザー名トークン) を使用して axis2 Web サービスを呼び出す必要があります。xfire dynamic clientを介して演習を行うことができましたが、wsdl ベース クライアント (つまり、wsdl から Java スタブを生成する) ではうまくいきませんでした。何が問題なのか (スタブ、ws-security など) を指摘してくれる人はいますか?

例外:

スレッド "メイン" org.codehaus.xfire.XFireRuntimeException の例外: サービスを呼び出すことができませんでした.. ネストされた例外は org.codehaus.xfire.fault.XFireFault です: オペレーションのエンドポイント参照 (EPR) が見つかりません https://localhost /services/DataServiceSample2 および WSA アクション = org.codehaus.xfire.fault.XFireFault: 操作のエンドポイント参照 (EPR) が見つかりません https://localhost/services/DataServiceSample2 および WSA アクション =

コード:

public static void main(String[] args) throws MalformedURLException {
    ProtocolSocketFactory easy = new EasySSLProtocolSocketFactory();
    Protocol protocol = new Protocol("https", easy, 9443);
    Protocol.registerProtocol("https", protocol);

    ObjectServiceFactory serviceFactory = new ObjectServiceFactory();
    serviceFactory.setStyle("message");
    Service serviceModel = serviceFactory.create(DataServiceSample2PortType.class);
    XFireProxyFactory factory = new XFireProxyFactory();
    DataServiceSample2PortType service = (DataServiceSample2PortType) factory.create(serviceModel, "https://localhost:9443/services/DataServiceSample2");
    Client client = Client.getInstance(service);
client.addOutHandler(new DOMOutHandler());

    Properties properties = new Properties();
    properties.setProperty(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
    properties.setProperty(WSHandlerConstants.USER, "admin");
    properties.setProperty(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
    properties.setProperty(WSHandlerConstants.PW_CALLBACK_CLASS, PasswordHandler.class.getName());
    client.addOutHandler(new WSS4JOutHandler(properties));

    sab.TopCustomerResponse topCustomersInCalifornia = service.topCustomersInCalifornia(null);
}
4

2 に答える 2

0

SOAPActionHTTP ヘッダーに" " パラメータがありません。次のように直接設定できます

HttpsURLConnection conn;
...
conn.setRequestProperty("SOAPAction", "urn:executeXml");

XFireクライアントのAFAIKでは、次のようにアーカイブできます。

    Map m = new HashMap();
    m.put("SOAPAction", "urn:executeXml");
    client.setProperty(CommonsHttpMessageSender.HTTP_HEADERS, m);
于 2011-10-02T17:03:59.500 に答える
0

localhostを、サービスが実行されているマシンの IP アドレスに置き換えてみてください。それ以外の

factory.create(serviceModel,"https://localhost:9443/services/DataServiceSample2");

このようにIPアドレスを指定してみることができます

factory.create(serviceModel,"https://192.168.2.18:9443/services/DataServiceSample2");

あいまいなパラメーターを含むコードを出荷することは悪い習慣と見なされることに注意してください。したがって、テストした後、ハードコードされた IP アドレスを、簡単に構成できる変数に置き換える必要があります。

于 2010-02-23T04:12:18.297 に答える