首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Java访问Salesforce Apex Soap Webservice

从Java访问Salesforce Apex Soap Webservice
EN

Stack Overflow用户
提问于 2012-06-26 17:43:07
回答 2查看 8.9K关注 0票数 4

我试图建立到我的Apex-Webservice的连接,但每次都失败。我的Webserce非常简单:

代码语言:javascript
复制
global class AtlassianService 
{
    webService static String hello(String Name) 
    {
        return 'Hello '+Name+' ! :D';
    }
}

为了生成客户端,我使用了here描述的方法

代码语言:javascript
复制
java –classpath pathToJAR/wsc-22.jar com.sforce.ws.tools.wsdlc pathToWsdl/WsdlFilename​ pathToOutputJar/OutputJarFilename

访问the服务:

代码语言:javascript
复制
SoapConnection soap = Connector.newConnection("mail@XXXXXX.com", "XXXX");

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

如果我使用PartnerConnection来获得一个有效的SessionID,一切都会正常工作:

代码语言:javascript
复制
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"));

有人知道为什么第一个例子失败了吗?

问候塞巴斯蒂安

EN

回答 2

Stack Overflow用户

发布于 2012-08-20 04:40:57

我假设发生这种情况的原因是,您的wsdl没有包含在AtlassianService中进行身份验证的登录方法,因此由wsdl生成的代理类无法拥有实际执行登录的代码。

我正在尝试做一些与您的问题非常相似的事情(但使用的是Enterprise API)。我找到的解决方案是:

使用WSC (mywebservice.jar)

  • Create MyWebservice

  • Perform (enterprise.jar)

  • Generate生成代理类使用WSC

  • Enterprise.wsdl MyWebservice.wsdl代理类使用WSC(mywebservice.jar)

  • Create与企业的连接,并获取SessionId

  • 在对MyWebservice.wsdl MyWebservice方法调用的请求中设置SessionId。

如下所示:

代码语言:javascript
复制
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();
    }  
  }
}
票数 8
EN

Stack Overflow用户

发布于 2012-06-28 15:10:32

在出现错误的情况下,wsc的每个操作调用都会抛出一个ConnectionException或它的一个具体的子类型。因此,您应该会得到一条错误消息,这可能有助于解决问题。为了调试由wsc发送和接收的soap消息,在初始化ConnectorConfig之后添加以下行:

代码语言:javascript
复制
conf.setPrettyPrintXml(true);
conf.setTraceMessage(true);

这将很好地打印出客户机和and服务之间交换的整个xml。resoponse还可能帮助您找到问题的原因。

希望这能有所帮助。h9nry

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11204614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档