4

Apex-Webservice への接続を確立しようとしていますが、毎回失敗します。私の Web サービスは非常にシンプルです。

global class AtlassianService 
{
    webService static String hello(String Name) 
    {
        return 'Hello '+Name+' ! :D';
    }
}

ここで説明されている方法でクライアント i を生成するには、次のようにします。

java –classpath pathToJAR/wsc-22.jar com.sforce.ws.tools.wsdlc pathToWsdl/WsdlFilename​ pathToOutputJar/OutputJarFilename

Web サービスへのアクセス:

SoapConnection soap = Connector.newConnection("mail@XXXXXX.com", "XXXX");

System.out.println(soap.hello("WORLD")); // Invalid Session ( => SessionID is null)

PartnerConnection を使用して有効な SessionID を取得すると、すべて正常に動作します。

ConnectorConfig config = new ConnectorConfig();
config.setUsername(username);
config.setPassword(password);
config.setAuthEndpoint("https://login.salesforce.com/services/Soap/u/24.0");

new PartnerConnection(config);

SoapConnection soap = Connector.newConnection(null, null);
soap.setSessionHeader(config.getSessionId());

System.out.println(soap.hello("WORLD"));

最初の例が失敗する理由を知っている人はいますか?

こんにちはセバスチャン

4

2 に答える 2

8

これは、AtlassianService wsdlにSalesforceで認証するためのログインメソッドが含まれておらず、WSCによって生成されたプロキシクラスに実際にログインを実行するためのコードが含まれていないために発生すると思います。

私はあなたの質問と非常によく似た何かをしようとしていました(ただし、Enterprise APIを使用)。私が見つけた解決策は次のとおりです。

  1. WSC for Enterprise.wsdl(enterprise.jar)を使用してプロキシクラスを生成する
  2. MyWebservice.wsdl(mywebservice.jar)のWSCを使用してプロキシクラスを生成する
  3. エンタープライズとの接続を作成し、SessionIdを取得します
  4. MyWebserviceへのリクエストでSessionIdを設定します
  5. MyWebserviceメソッド呼び出しを実行します。

このような:

import com.sforce.soap.MyWebservice.SoapConnection;
import com.sforce.soap.MyWebservice.Connector;

import com.sforce.ws.ConnectionException;
import com.sforce.ws.ConnectorConfig;
import com.sforce.soap.enterprise.*;


public class CallWS {


  static final String USERNAME = "username";
  static final String PASSWORD = "pass+securitytoken";

  static SoapConnection MyWebserviceWSconnection;
  static EnterpriseConnection enterpriseConnection;

  public static void main(String[] args) {

    ConnectorConfig config = new ConnectorConfig();
    config.setUsername(USERNAME);
    config.setPassword(PASSWORD);


    try {

      //create a connection to Enterprise API -- authentication occurs
      enterpriseConnection = com.sforce.soap.enterprise.Connector.newConnection(config);    
      // display some current settings
      System.out.println("Auth EndPoint: "+config.getAuthEndpoint());
      System.out.println("Service EndPoint: "+config.getServiceEndpoint());
      System.out.println("Username: "+config.getUsername());
      System.out.println("SessionId: "+config.getSessionId());


      //create new connection to exportData webservice -- no authentication information is included
      MyWebserviceWSconnection = Connector.newConnection("","");
      //include session Id (obtained from enterprise api) in exportData webservice
      MyWebserviceWSconnection.setSessionHeader(config.getSessionId());


      String result = MyWebserviceWSconnection.receiveData("test");
      System.out.println("Result: "+result);


    } catch (ConnectionException e1) {
        e1.printStackTrace();
    }  
  }
}
于 2012-08-19T20:40:56.663 に答える
0

wsc のすべての操作呼び出しは、エラーが発生した場合に ConnectionException またはその具体的なサブタイプの 1 つをスローします。そのため、おそらく問題の解決に役立つエラー メッセージが表示されるはずです。wsc によって送受信される SOAP メッセージをデバッグするには、ConnectorConfig の初期化の後に次の行を追加します。

conf.setPrettyPrintXml(true);
conf.setTraceMessage(true);

これにより、クライアントと Web サービスの間で交換される xml 全体がきれいに印刷されます。応答は、おそらく問題の原因を見つけるのにも役立ちます。

お役に立てれば。h9nry

于 2012-06-28T07:10:31.790 に答える