2012-06-26 3 views
4

Я пытаюсь установить соединение с моим Apex-Webservice, но он терпит неудачу каждый раз. Мой Webserce довольно просто:Access Salesforce Apex Soap Webservice от Java

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

Для создания клиента я просто способ, который описан here:

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

Доступ к WebService:

SoapConnection soap = Connector.newConnection("[email protected]", "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")); 

У кого-нибудь есть идея, почему первый пример не удается?

Привет Себастьян

ответ

0

каждая операция вызов WSC бросает ConnectionException или один из его конкретных подтипов в случае ошибки. поэтому вы должны получить сообщение об ошибке, которое, вероятно, поможет решить проблему. для того, чтобы отладить мыльные сообщения, отправленные и полученные WSC добавить следующие строки после инициализации вашего ConnectorConfig:

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

Это довольно-печать весь XML обмен данными между клиентом и веб-сервиса. Вероятно, ответ также поможет вам найти причину вашей проблемы.

Надеюсь, это поможет. h9nry

8

Я предполагаю, что это происходит из-за того, что ваш AtlassianService wsdl не включает метод входа в систему для проверки подлинности в Salesforce, а затем прокси-классы, созданные WSC, не могут иметь код для фактического выполнения входа.

Я пытался сделать что-то очень похожее на ваш вопрос (но с Enterprise API). Решение, которое я нашел, было:

  1. Генерация классов прокси-сервера с помощью WSC для Enterprise.wsdl (enterprise.jar)
  2. Генерация классов прокси-сервера с помощью WSC для MyWebservice.wsdl (mywebservice.jar)
  3. Создать соединение с предприятие и получить SessionId
  4. Установить SessionId в запросе MyWebservice
  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(); 
    } 
    } 
} 
Смежные вопросы