gpt4 book ai didi

android - 无法从 Android 客户端连接到 Tridion 核心服务

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:43:49 26 4
gpt4 key购买 nike

我正在开发一个用于连接到 Tridion 2011 SP1 核心服务的 Android 应用程序。到目前为止,我已经使用 wsclient 从核心服务 wsdl 创建了 Android WS Stub。

导入了那些允许访问所有核心服务方法的 stub 。

我现在可以通过 Android 应用程序向 Tridion 进行身份验证,但是一旦我尝试执行最基本的网络服务调用,例如 getApiVersion(),我就会收到错误消息:

ReflectionHelper*java.lang.NoSuchFieldException: GetApiVersionResult.

我想知道是否还有其他人设法创建了一个与核心服务通信的 java android 应用程序?

有趣的是,如果我将代码作为 Java 应用程序运行,使用 wsimport stub 一切正常。

感谢任何帮助。这里有一个代码 fragment 供引用:

连接到 Tridion:

class TridionConnect extends AsyncTask<String, Integer, String> { 
// Called to initiate the background activity

@Override
protected String doInBackground(String... statuses) {
try {
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("username", "password".toCharArray());
}
});

url = new URL("http://tridion-server/webservices/CoreService2011.svc?wsdl");

System.out.println(String.format("Get Service"));
service = new CoreService2011();
System.out.println(String.format("Get Client"));

client = service.getBasicHttp();

return "Authenticated To Tridion";
} catch (Exception e) {
Log.e("Authentication failure", e.toString());
e.printStackTrace();
return "Failed to authenticate";
}
}

// Called when there's a status to be updated
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
// Not used in this case
}

// Called once the background activity has completed
@Override
protected void onPostExecute(String result) { //
Toast.makeText(FullscreenActivity.this, result, Toast.LENGTH_LONG).show();
area.setText("Authenticated to Tridion OK");
}
}

获取ApiVersion

client.getApiVersion();
UserData currentUser = client.getCurrentUser();
System.out.println(String.format("'%s' %s", currentUser.getTitle(), currentUser.getId()));

最佳答案

弗兰克,

由于几个原因,这是不可能的。

如果您使用 wsimport 创建核心服务代理,它将使用 JRE 中存在的 javax 库。然而,Dalvik 仅实现了 javax 库的一个子集,这意味着这种方法在 Android 环境中是不可能的。

然后我查看了用于创建代理的 Ksoap2 工具。这似乎工作正常,因为它确实创建了一个代理,但是它与核心服务不匹配,所以我无法进行身份验证。除了检查 JRE 代理 v Ksoap2 代理之外,我没有进一步了解这种方法。他们完全不同。

此时我退后一步,喝了杯茶,重新设计了方法。

我创建了一个 C# REST 服务,位于 Android 应用和核心服务之间。

这种方法看起来有点复杂,但它提供了很多优势。许多基本工作都可以在 REST 服务中完成,这比平板电脑或手机上的类似代码要快得多。

其次,REST 服务与 CMS/CoreService 位于同一台服务器上,因此通信速度更快,您可以使来自 Android 应用程序的 REST 请求更轻松。

我已将应用程序设置为您可以向 Tridion 进行身份验证、选择出版物和组件,然后在动态布局中呈现这些组件以准备更新/保存/发布。

这种方法的一大缺点是 REST 服务“应该”是无状态的,因此从表面上看,您必须为每个请求向核心服务进行身份验证。当然我不会那样做,但你必须想出一些替代方法 Oauth、共享 secret 等。

在最初的测试中,这种方法在 Android 设备上似乎相当灵巧。

关于android - 无法从 Android 客户端连接到 Tridion 核心服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14219364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com