使用java调用 salesforce SOAP API

可以从github上下载最新版本然后用maven工具构建

下面列下我用wsc工具打成jar包测试过程中的代码:

java -cp force-wsc-27.0.0-jar-with-dependencies.jar com.sforce.ws.tools.wsdlc enterprise.wsdl Salesforceenterprise.jar
java -cp force-wsc-27.0.0-jar-with-dependencies.jar com.sforce.ws.tools.wsdlc enterprise.wsdl Salesforceenterprise.jar
[WSC][wsdlc.run:320]Created temp dir: C:\Users\SHENG~1.CHE\AppData\Local\Temp\wsdlc-temp-4791251528898326406-dir
[WSC][wsdlc.:81]Generating Java files from schema ...

[WSC][wsdlc.:81]Generated 374 java files.

[WSC][wsdlc.compileTypes:270]Compiling to target 1.6...

[WSC][wsdlc.compileTypes:270]Compiled 377 java files.

[WSC][wsdlc.:91]Generating jar file ... Salesforceenterprise.jar
[WSC][wsdlc.:91]To include runtime classes in the generated jar please set system property standalone-jar=true
[WSC][wsdlc.:91]Generated jar file Salesforceenterprise.jar
[WSC][wsdlc.run:320]Delete temp dir: C:\Users\SHENG~1.CHE\AppData\Local\Temp\wsdlc-temp-4791251528898326406-dir
[WSC][wsdlc.run:320]Set system property del-temp-dir=false to not delete temp dir.

[WSC][wsdlc.run:320]Completed enterprise.wsdl in (ms) 17833

测试中把其中下载的wsdl文件也放在wsc的target目录了 \成功生成jar包后,将生成后的jar包和force-wsc-xx.jar包一起导入eclipse。

然后就可以用eclipse来操作salesforce中的对象了。

以下是一个测试用例,可以将Acount对象更改成你想操作的任意对象

package wsc;

import com.sforce.soap.enterprise.Connector;
import com.sforce.soap.enterprise.DeleteResult;
import com.sforce.soap.enterprise.EnterpriseConnection;
import com.sforce.soap.enterprise.Error;
import com.sforce.soap.enterprise.QueryResult;
import com.sforce.soap.enterprise.SaveResult;
import com.sforce.soap.enterprise.sobject.Account;
import com.sforce.soap.enterprise.sobject.Contact;
import com.sforce.ws.ConnectionException;
import com.sforce.ws.ConnectorConfig;

public class Main {

static final String USERNAME = "YOUR-USERNAME";
static final String PASSWORD = "YOUR-PASSWORD&SECURITY-TOKEN";
  static EnterpriseConnection connection;

  public static void main(String[] args) {

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

    try {

      connection = 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());

      // run the different examples
      queryContacts();
      createAccounts();
      updateAccounts();
      deleteAccounts();

    } catch (ConnectionException e1) {
        e1.printStackTrace();
    }

  }

  // queries and displays the 5 newest contacts
  private static void queryContacts() {

    System.out.println("Querying for the 5 newest Contacts...");

    try {

      // query for the 5 newest contacts      
      QueryResult queryResults = connection.query("SELECT Id, FirstName, LastName, Account.Name " +
            "FROM Contact WHERE AccountId != NULL ORDER BY CreatedDate DESC LIMIT 5");
      if (queryResults.getSize() > 0) {
        for (int i=0;i// cast the SObject to a strongly-typed Contact
          Contact c = (Contact)queryResults.getRecords()[i];
          System.out.println("Id: " + c.getId() + " - Name: "+c.getFirstName()+" "+
              c.getLastName()+" - Account: "+c.getAccount().getName());
        }
      }

    } catch (Exception e) {
      e.printStackTrace();
    }

  }

  // create 5 test Accounts
  private static void createAccounts() {

    System.out.println("Creating 5 new test Accounts...");
    Account[] records = new Account[5];

    try {

      // create 5 test accounts
      for (int i=0;iAccount a = new Account();
        a.setName("Test Account "+i);
        records[i] = a;
      }

      // create the records in Salesforce.com
      SaveResult[] saveResults = connection.create(records);

      // check the returned results for any errors
      for (int i=0; i< saveResults.length; i++) {
        if (saveResults[i].isSuccess()) {
          System.out.println(i+". Successfully created record - Id: " + saveResults[i].getId());
        } else {
          Error[] errors = saveResults[i].getErrors();
          for (int j=0; j< errors.length; j++) {
            System.out.println("ERROR creating record: " + errors[j].getMessage());
          }
        }
      }

    } catch (Exception e) {
      e.printStackTrace();
    }

  }

  // updates the 5 newly created Accounts
  private static void updateAccounts() {

    System.out.println("Update the 5 new test Accounts...");
    Account[] records = new Account[5];

    try {

      QueryResult queryResults = connection.query("SELECT Id, Name FROM Account ORDER BY " +
            "CreatedDate DESC LIMIT 5");
      if (queryResults.getSize() > 0) {
        for (int i=0;i// cast the SObject to a strongly-typed Account
          Account a = (Account)queryResults.getRecords()[i];
          System.out.println("Updating Id: " + a.getId() + " - Name: "+a.getName());
          // modify the name of the Account
          a.setName(a.getName()+" -- UPDATED");
          records[i] = a;
        }
      }

      // update the records in Salesforce.com
      SaveResult[] saveResults = connection.update(records);

      // check the returned results for any errors
      for (int i=0; i< saveResults.length; i++) {
        if (saveResults[i].isSuccess()) {
          System.out.println(i+". Successfully updated record - Id: " + saveResults[i].getId());
        } else {
          Error[] errors = saveResults[i].getErrors();
          for (int j=0; j< errors.length; j++) {
            System.out.println("ERROR updating record: " + errors[j].getMessage());
          }
        }
      }

    } catch (Exception e) {
      e.printStackTrace();
    }

  }

  // delete the 5 newly created Account
  private static void deleteAccounts() {

    System.out.println("Deleting the 5 new test Accounts...");
    String[] ids = new String[5];

    try {

      QueryResult queryResults = connection.query("SELECT Id, Name FROM Account ORDER BY " +
            "CreatedDate DESC LIMIT 5");
      if (queryResults.getSize() > 0) {
        for (int i=0;i// cast the SObject to a strongly-typed Account
          Account a = (Account)queryResults.getRecords()[i];
          // add the Account Id to the array to be deleted
          ids[i] = a.getId();
          System.out.println("Deleting Id: " + a.getId() + " - Name: "+a.getName());
        }
      }

      // delete the records in Salesforce.com by passing an array of Ids
      DeleteResult[] deleteResults = connection.delete(ids);

      // check the results for any errors
      for (int i=0; i< deleteResults.length; i++) {
        if (deleteResults[i].isSuccess()) {
          System.out.println(i+". Successfully deleted record - Id: " + deleteResults[i].getId());
        } else {
          Error[] errors = deleteResults[i].getErrors();
          for (int j=0; j< errors.length; j++) {
            System.out.println("ERROR deleting record: " + errors[j].getMessage());
          }
        }
      }

    } catch (Exception e) {
      e.printStackTrace();
    }

  }

}

().length;i++)>().length;i++)>().length;i++)>

Original: https://www.cnblogs.com/csophys/archive/2013/03/08/2950419.html
Author: csophys
Title: 使用java调用 salesforce SOAP API

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/580020/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • springboot线程

    (1)确保只有一个线程调用这个方法并且确保只创建一个HotSpot VM实例。因为HotSpot VM创建的静态数据结构无法再次初始化,所以一旦初始化到达某个确定点后,进程空间里就…

    Java 2023年5月30日
    093
  • java selenium (六) XPath 定位

    xpath 的定位方法, 非常强大。 使用这种方法几乎可以定位到页面上的任意元素。 什么是xpath xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XM…

    Java 2023年5月29日
    077
  • Spring(二)——IOC

    控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理 目的:降低耦合度 xml 解析、工厂模式、反射 IOC接口 BeanFactory:IOC 容器基本实现,是…

    Java 2023年6月16日
    080
  • 历时2月,动态线程池 DynamicTp 发布里程碑版本 V1.0.8

    关于 DynamicTp DynamicTp 是一个基于配置中心实现的轻量级动态线程池管理工具,主要功能可以总结为动态调参、通知报警、运行监控、三方包线程池管理等几大类。 经过多个…

    Java 2023年6月14日
    090
  • 【Unity】在Unity中通过触发播放音频

    1、创建音频播放组件 首先在Hierarchy窗口中新建空组件。 选中新建的组件,在Inspector窗口中添加组件”Audio Source”,并将要播放…

    Java 2023年6月9日
    0105
  • RabitMQ 简介

    The secret of being miserable is to have leisure to bother about whether you are happy or …

    Java 2023年6月9日
    065
  • 利用拦截器加缓存完成接口防刷操作

    One person walks fast, but a group of people can go further 为什么需要接口防刷 为了减缓服务器压力,将服务器资源留待给有…

    Java 2023年6月13日
    075
  • 十、包机制与JavaDoc

    一、包机制 为了更好的组织类,Java提供了包机制,用于区别类名的命名空间。包语句的语句格式为: package pkg1[. pkg2[. pkg3…]]; 一般使用公司域名…

    Java 2023年6月5日
    079
  • 服务器上部署前后端分离项目(springboot+vue)

    介绍:本文用的经典的前后端分离开源项目ruoyi Gitee链接地址:https://gitee.com/y_project/RuoYi 一、拉取项目: 利用Git把项目拉取到本地…

    Java 2023年6月9日
    070
  • Vue 两个字段联合校验典型例子–修改密码

    1、前言 本文是前文《Vue Element-ui表单校验规则,你掌握了哪些?》针对多字段联合校验的典型应用。 在修改密码时,一般需要确认两次密码一致,涉及2个属性字段。类似的涉及…

    Java 2023年6月14日
    0100
  • 约瑟夫问题

    这篇博客是我在B站看韩顺平老师的数据结构和算法的约瑟夫问题后的学习笔记,记录一下,防止忘记,也希望能帮到各位小伙伴。 问题引入:设编号为 1,2,… n 的 n 个人围…

    Java 2023年6月15日
    0109
  • junit结合spring-test里的MockMvc来测试SpringMvc接口方法

    如下是SpringMvc项目里的Controller 重点来了,junit结合spring-test里的MockMvc来测试上面的http接口 运行结果(支持debug调试,是不是…

    Java 2023年5月29日
    0157
  • JavaWeb序

    服务器端的编程基础 因JS的特效在本机不能显示,故直接进行javaweb的学习,抱歉… BS与CS的异同 BS:客户端服务器架构模式 CS:浏览器服务器架构模式 Tom…

    Java 2023年6月5日
    0103
  • 线程池底层原理

    线程池底层原理 ThreadPoolExecutor 参数 corePoolSize(必填) : 核心线程数 maximumPoolSize(必填):最大线程数 keepAlive…

    Java 2023年6月5日
    088
  • 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第11版)

    第11版更新震撼发布,功能更加强大,速度过来围观,此次版本更新如下: 1、新增数据源配置管理功能,可以为每种类型的数据库添加多个不同的数据源。 2、新增快速新增数据源功能,快速为当…

    Java 2023年6月9日
    086
  • Spring Boot启动流程

    Spring Boot启动流程 君生我未生,君生我已老。君恨我生迟,我恨君生早。 一、简述 Spring Boot启动流程分析使用版本SpringBoot VERSION:版本 2…

    Java 2023年6月5日
    0119
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球