Force.com for Google App Engineについて

閲覧: 109 回
最初の未読メッセージにスキップ

りっく

未読、
2009/11/26 21:57:492009/11/26
To: Google-App-Engine-Japan
Force.com for Google App Engineを利用した
Google App EngineからSalseforceへアクセスする方法を試しております。


http://developer.force.com/appengine より
Force.com for Google App Engineのツールキットをダウンロードして、
参照ライブラリーに追加しました。

同ページのSampleを試してみましたが、
SObject account = new SObject();
account.setType("Account");
account.setField("Name", "My New Account" );
account.setField("Phone", "123 244 3455");
connection.create(new SObject[] { account });

account.setTypeで「メソッドsetType(String)は型SObjectで未定義です。」
とのエラーが出ます。

この現象の回避方法または、参考になるサイトなどを教えていただけませんでしょうか?
メッセージは削除されました

Yoshifumi KOHATA

未読、
2009/11/27 18:40:392009/11/27
To: google-app-...@googlegroups.com
すみません。先のメールに誤りがあったので一部訂正させてください!

> wscは、そのWSDLをJavaでコンパイルしたクライアント
> ライブラリです。

partner-library.jarが、WSDLをコンパイルしたものです。
で、wsc は、WSDLのコンパイラなどを含むクライアントの基盤機能
を提供するライブラリです。

以上、ご参考まで。


2009年11月28日8:35 Yoshifumi KOHATA <kohata.y...@gmail.com>:
> アピリオ 木幡と申します。
> はじめまして。
>
> http://code.google.com/p/sfdc-wsc/downloads/list
> にあるライブラリを使用されたかと思いますが、
> そのサンプルをGAE/Java環境で動作させるには、
>
> partner-library.jar
> wsc-gae-16_0.jar
>
> です。
>
> 今ほど確認したところ、partner-library.jar に含まれる
> com.sforce.soap.partner.sobjectSObject#setType
> は定義されているようです。
>
> また、実際に試してみたところ、(Account ではなく
> カスタムオブジェクトですが)動作しました。
>
> これらのライブラリは、salesforce.comが提供する
> WebServices APIを使っています。
> salesforce.com の設定サイトからWSDLを取得できます。
> wscは、そのWSDLをJavaでコンパイルしたクライアント
> ライブラリです。
>
> 以下のリソースが参考になるかと思います。
>
> Force.com Web Services Developer's Guide:
> http://www.salesforce.com/us/developer/docs/api/index.htm
> http://www.salesforce.com/us/developer/docs/api/index_Left.htm#StartTopic=Content%2Fsforce_api_partner.htm|SkinName=webhelp
>
> Force.com Web Service Conector(WSC)
> http://code.google.com/p/sfdc-wsc/wiki/GettingStarted
>
>
> 以上、ご参考までに。
>
>
>
>
> 2009年11月27日11:57 りっく <mats...@kkhts.com>:

> --
> --
> KOHATA Yoshifumi
>

--
--
KOHATA Yoshifumi

Yoshifumi KOHATA

未読、
2009/11/27 18:35:182009/11/27
To: google-app-...@googlegroups.com
アピリオ 木幡と申します。
はじめまして。

http://code.google.com/p/sfdc-wsc/downloads/list
にあるライブラリを使用されたかと思いますが、
そのサンプルをGAE/Java環境で動作させるには、

partner-library.jar
wsc-gae-16_0.jar

です。

以下のリソースが参考になるかと思います。


以上、ご参考までに。


2009年11月27日11:57 りっく <mats...@kkhts.com>:
>

--
--
KOHATA Yoshifumi

りっく

未読、
2009/11/30 2:42:242009/11/30
To: Google-App-Engine-Japan
回答ありがとうございます。

アドバイスの通りに実践を行いましたら、
com.sforce.soap.partner.sobjectSObject#setType
は見つかりましたが現在以下のエラーが発生しております。

『HTTP ERROR: 500
 Could not initialize class com.sforce.ws.ConnectorConfig』


現在の手順は以下の通りです。
①新規GoogleAppEngineアプリケーションの作成
・Use Google Toolkit のチェックをはずす。

②[プロパティ]→[AppEngine]
・アプリケーションIDを振る

③[プロパティ]→[Javaのビルドパス→ライブラリー]
・partnar-library.jarとwsc-gae-16_0.jarを追加

④『アプリケーション名』Servletを以下のように作成
package gaptest;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.*;

import com.sforce.soap.partner.*;
import com.sforce.soap.partner.sobject.*;
import com.sforce.ws.*;

@SuppressWarnings("serial")
public class GAP_TEST_01Servlet extends HttpServlet {
static String username = "username";
static String password = "password";
static PartnerConnection connection;

public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
try {
ConnectorConfig config = new ConnectorConfig();
config.setUsername(username);
config.setPassword(password);

connection = Connector.newConnection(config);

SObject test = new SObject();
test.setType("TEST");
test.setField("test_CD", "1");
test.setField("test_Name", "testtttt");
test.update(new SObject[] { test });

} catch (ConnectionException e) {
System.out.print("エラーです_01");
}
}
}

⑤[Deploy Project to Google App Engine] を実施

⑥[実行]→[Web AppliCation]を実施

ここまでの手順で何か不備等はありますでしょうか?
お手数ですがアドバイスをよろしくお願いします。


Yoshifumi KOHATA

未読、
2009/11/30 3:17:012009/11/30
To: google-app-...@googlegroups.com
アピリオ 木幡です。


> 『HTTP ERROR: 500
> Could not initialize class com.sforce.ws.ConnectorConfig』

なるほど。なかなか一筋縄ではいかないようですね。

「Could not initialize class」は、NoClassDefFoundError あたりが発生している
ような気がしますが、StackTraceは得られていますでしょうか?

NoClassDefFoundError など、class定義が見つかっていない系の問題であれば
jarが正しく設置されているかどうか、再度確認してみるのが良いかと思います。

partnar-library.jarとwsc-gae-16_0.jar は、
/war/WEB-INF/lib
以下におかれていますでしょうか?


または、使用しているユーザーにAPIを使用する権限がないのかも知れません。
(username, password で指定するアカウントです)
ユーザーに割り当てられているプロファイルに設定項目があるかと思います。

APIが返すエラーであれば、StackTraceが得られると思います。
差し支えなければ、開示くださいますか?原因がわかるかもしれません。


以上、よろしくお願い申し上げます。


2009年11月30日16:42 りっく <mats...@kkhts.com>:

--
--
KOHATA Yoshifumi

りっく

未読、
2009/11/30 3:56:572009/11/30
To: Google-App-Engine-Japan
> partnar-library.jarとwsc-gae-16_0.jar は、
> /war/WEB-INF/lib
> 以下におかれていますでしょうか?
⇒ここに関しては大丈夫だと思われます。

> または、使用しているユーザーにAPIを使用する権限がないのかも知れません。
> (username, password で指定するアカウントです)
> ユーザーに割り当てられているプロファイルに設定項目があるかと思います。
⇒username:salesforceのログインID
password:salesforceのログインパスワード
 にて現在設定しておりますがこれは間違っているのでしょうか?
また、API権限を設定しておりませんが、どこで行えばよろしいでしょうか?

> APIが返すエラーであれば、StackTraceが得られると思います。
> 差し支えなければ、開示くださいますか?原因がわかるかもしれません。
⇒これでよろしいでしょうか?
HTTP ERROR: 500

Could not initialize class com.sforce.ws.ConnectorConfig

RequestURI=/gap_test_01
Caused by:

java.lang.NoClassDefFoundError: Could not initialize class
com.sforce.ws.ConnectorConfig
at gaptest.GAP_TEST_01Servlet.doGet(GAP_TEST_01Servlet.java:27)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1093)
at
com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter
(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
at com.google.appengine.tools.development.StaticFileFilter.doFilter
(StaticFileFilter.java:121)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter
(ServletHandler.java:1084)
at org.mortbay.jetty.servlet.ServletHandler.handle
(ServletHandler.java:360)
at org.mortbay.jetty.security.SecurityHandler.handle
(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle
(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle
(ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
405)
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle
(DevAppEngineWebAppContext.java:54)
at org.mortbay.jetty.handler.HandlerWrapper.handle
(HandlerWrapper.java:139)
at com.google.appengine.tools.development.JettyContainerService
$ApiProxyHandler.handle(JettyContainerService.java:342)
at org.mortbay.jetty.handler.HandlerWrapper.handle
(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:313)
at org.mortbay.jetty.HttpConnection.handleRequest
(HttpConnection.java:506)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete
(HttpConnection.java:830)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
at org.mortbay.io.nio.SelectChannelEndPoint.run
(SelectChannelEndPoint.java:396)
at org.mortbay.thread.BoundedThreadPool$PoolThread.run
(BoundedThreadPool.java:442)

Powered by Jetty://


以上よろしくお願いします。

Yoshifumi KOHATA

未読、
2009/11/30 5:19:212009/11/30
To: google-app-...@googlegroups.com
アピリオ 木幡です。

送って頂きましたStackTraceを拝見いたしました。

やはり NoClassDefFoundError が発生しているようです。
APIにアクセスする手前で発生しているようですので、ユーザーの権限
などは、本件の直接的な原因ではなさそうです。

実行時に com.sforce.ws.ConnectorConfig クラスの実体が見つけられて
いないので、wsc-gae-16_0.jar がGAEから参照できていないのでは
ないかと思われるのですが、先のメールで、/war/WEB-INF/lib以下にある
ということですので、う〜む、という感じです (^^;。
(com.sforce.ws.ConnectorConfigは、wsc-gae-16_0.jar に含まれます)


Google App Engine Java NoClassDefFoundError をググると、同様の
問題ではなかろうかという報告が見受けられますが、解決方法は
見つかりませんでした。

以下のURLにも、謎のエラーとして報告があるようです。
http://d.hatena.ne.jp/kazunori_279/20090922/1253580889
同じ現象かどうかは、不明ですが。

ちなみに、ローカルの開発環境(localhost:8080)では発生しますか?
そうであれば、設定まわりのような気もするのですが。。

GAE上でのみ発生するということであれば、GAEを疑って、違う
アカウントで試してみる、新しくアプリを作成して試してみる、
などしてみてはいかがでしょうか?

取り留めがなくなってしまい、申し訳ありません。

2009年11月30日17:56 りっく <mats...@kkhts.com>:

--
--
KOHATA Yoshifumi

りっく

未読、
2009/12/01 0:21:012009/12/01
To: Google-App-Engine-Japan

返事がおそくなり申し訳ありません。

> ちなみに、ローカルの開発環境(localhost:8080)では発生しますか?
> そうであれば、設定まわりのような気もするのですが。。
⇒ローカル環境での実行です。

NoClassDefFoundErrorの件ですが、
appengine-java-sdk-1.2.6をappengine-java-sdk-1.2.5に
変更することで回避できました。

現在のエラーは
java.lang.UnsupportedOperationException: Method not implemented.
at java.net.URLStreamHandler.openConnection(URLStreamHandler.java:80)
at java.net.URL.openConnection(URL.java:992)
at com.sforce.ws.transport.JdkHttpTransport.connect
(JdkHttpTransport.java:80)
at com.sforce.ws.transport.JdkHttpTransport.connect
(JdkHttpTransport.java:70)
at com.sforce.ws.transport.SoapConnection.send(SoapConnection.java:
99)
at com.sforce.soap.partner.PartnerConnection.login
(PartnerConnection.java:754)
at com.sforce.soap.partner.PartnerConnection.<init>
(PartnerConnection.java:294)
at com.sforce.soap.partner.Connector.newConnection(Connector.java:27)
at gaptest04.GAP_TEST_04Servlet.doGet(GAP_TEST_04Servlet.java:29)
$ApiProxyHandler.handle(JettyContainerService.java:313)
at org.mortbay.jetty.handler.HandlerWrapper.handle
(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:313)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
506) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete
(HttpConnection.java:830)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
at org.mortbay.io.nio.SelectChannelEndPoint.run
(SelectChannelEndPoint.java:396)
at org.mortbay.thread.BoundedThreadPool$PoolThread.run
(BoundedThreadPool.java:442)


エラー箇所は以前のソースの
> connection = Connector.newConnection(config);
です。

これは設定の問題なのでしょうか?
お手数ですがアドバイスをよろしくお願いします。


Yoshifumi KOHATA

未読、
2009/12/01 1:41:102009/12/01
To: google-app-...@googlegroups.com
アピリオ 木幡です。


> 現在のエラーは
> java.lang.UnsupportedOperationException: Method not implemented.
> at java.net.URLStreamHandler.openConnection(URLStreamHandler.java:80)
> at java.net.URL.openConnection(URL.java:992)

こちらですが、以下のサイトに同様の問題についてのポストがあります。

http://code.google.com/p/sfdc-wsc/wiki/GettingStarted

wsc-16_0.jar ではなく、 wsc-gae-16_0.jar を使うように、とのフォローが付いて
います。

念のため、ソースを確認しましたが、JdkHttpTransport クラスは、GAE対応版
(wsc-gae-16_0.jar)には存在せず、代わりにGAEHttpTransport があるようです。

以上のことから、ご連絡頂いた内容から推測するに、GAE対応版でないwscの
コードが使われているように思えますがいかがでしょうか。


以上、ご参考になれば幸いです。

2009年12月1日14:21 りっく <mats...@kkhts.com>:

--
--
KOHATA Yoshifumi

りっく

未読、
2009/12/01 2:33:412009/12/01
To: Google-App-Engine-Japan
> 以上のことから、ご連絡頂いた内容から推測するに、GAE対応版でないwscの
> コードが使われているように思えますがいかがでしょうか。

http://code.google.com/p/sfdc-wsc/downloads/listよりダウンロードし
/war/WEB-INF/lib配下に追加したpartnar-library.jarとwsc-gae-16_0.jar 以外の、
ファイルを削除した場合にSalseforceへのアクセスが確認できました。


木幡さんにはとてもお世話になりました。
すごく感謝をしております。ありがとうございました。


追記:
 ・appengine-java-sdkは1.2.5でも1.2.6でも動作を確認しました。
  こちらの方は関係なかったのですね。

Yoshifumi KOHATA

未読、
2009/12/01 3:46:532009/12/01
To: google-app-...@googlegroups.com
アピリオ 木幡です。

> ⇒ http://code.google.com/p/sfdc-wsc/downloads/listよりダウンロードし
> /war/WEB-INF/lib配下に追加したpartnar-library.jarとwsc-gae-16_0.jar 以外の、
> ファイルを削除した場合にSalseforceへのアクセスが確認できました。

おお、良かったですね!

Force.com については、まだまだ情報が少なく、ハマると苦労しますね。
私も調べていていろいろ勉強になりました。

今後とも、どうぞよろしくお願いいたします。


2009年12月1日16:33 りっく <mats...@kkhts.com>:

--
--
KOHATA Yoshifumi

全員に返信
投稿者に返信
転送
新着メール 0 件