`

liferay axis 外部WebService调用转换ClassCastExcep

阅读更多

When some code within a portlet consumes non-Liferay web services with the help of the AXIS package, an unexpected error happens.
This error is related to the invocation of the com.liferay.util.axis.SimpleHTTPSender.

The same code will not produce this error if it is running outside of the Liferay portlet environment.

The cause of the error is a silent assumption that every call to AXIS is about Liferay services and in this case com.liferay.util.axis.SimpleHTTPSender knows what to do.
But in the situation when the AXIS is used to consume non-Liferay web services, this invocation is wrong.

The workaround:
open a jar file: tomcat/webapps/ROOT/WEB-INF/lib/util-java.jar
delete from this jar: client-config.wsdd
(In this file there is a line that instructs to invoke the SimpleHTTPSender)
save this jar back as: tomcat/webapps/ROOT/WEB-INF/lib/util-java.jar

Check if this util-java.jar file is included in the YourPortlet/WEB-INF/lib
If so, do the same thing. (Be aware that util-java.jar is created in each build)

Although the problem has surfaced many times without good explanation, there is at least one place where it was described: http://issues.liferay.com/browse/LEP-1190, August 26, 2006 by Javier Cámara.

Thank you, Javier!
----------------------------
If you expected that this is it... you are almost right. One more thing: working with web services within the web application causes more than one ClassLoader to work on jars. Duplication of the axis.jar (one is in the portlet/WEB-INF/lib and another is in the tomcat/webapps/ROOT/WEB-INF/lib) tricks the Class Loaders into the Exception:

ClassCastException: org.apache.axis.attachments.AttachmentsImpl cannot be cast to org.apache.axis.attachments.Attachments

Delete this one: tomcat/webapps/ROOT/WEB-INF/lib/axis.jar
-----------------------------
Soon after solving this one I found out the message by Raj K. with the same solution: http://www.liferay.com/community/forums/-/message_boards/message/5677416

Thank you, Raj!

Jeff (Yefim)

 

 

 

 

 

 

 

 

Hi,

After months of trial and error, we were able to fix the issue.

If you are using a webservice in your project and if you are generating the webservice client jar from your eclipse workspace, make sure you are using the axis jar provided by liferay/lib/ and not the default eclipse axis jar. Ideally speaking you will require only the following jars from tomcat/lib and these are the ones that should be available in build path for client generation. Remove all the eclipse jars before exporting the jar.

axis.jar
jbossws-native-jaxrpc.jar
wsdl4j.jar

For deployment,
Delete the axis jar from your portlet as you have already one in lib\ext. Have the client jar either in lib/ext if more than one portlets are using it or have it within the app war accordingly, dont have multiple instances of same jar as it causes class cast.

Tried the above and it worked for me.

Thanks & Regards,
Venkat.S

s

 

 

分享到:
评论

相关推荐

    liferay门户调用webservice依赖jar包

    这些JAR包包含了必要的API和工具,使得Liferay能够与外部系统进行通信,例如数据交换、业务集成等。 在这个场景中,提到的"liferay-portal-client-6.1.2-ce-ga3"是一个特定版本的Liferay门户客户端库。这个库主要...

    liferay-webservice

    【Liferay Webservice 教程】:通过Liferay Webservice,开发者可以轻松地为Liferay Portal创建服务,使得远程系统能够与Liferay中的portlet进行交互。以下是一个详细的步骤指南,教你如何利用Liferay Service ...

    liferay JSON Web服务接口调用示例.docx

    Liferay.Service是用于在客户端JavaScript中调用服务器端JSON Web服务的API。以下是一些关键知识点: - **获取用户**:在1.1中,我们看到如何通过电子邮件地址获取用户。首先,指定服务路径`'/user/get-user-by-...

    lfieray-webservice-调用

    总之,Liferay的Web服务调用涉及Apache Axis、服务配置、IP白名单以及权限控制等多方面。正确理解和配置这些要素对于充分利用Liferay的Web服务功能至关重要。开发者可以根据自身需求定制服务配置,以实现更灵活的...

    Liferay跨页面Portlet之间的调用与数据传递.docx

    在Liferay中,跨页面Portlet之间的调用与数据传递是一项关键任务,因为这涉及到不同Portlet间的协作和信息共享。Liferay提供了多种通信机制,包括PortletSession、Public Render Parameters以及Portlet事件,但这些...

    Liferay7.0自定义登录实例

    在本文中,我们将深入探讨如何在Liferay 7.0中实现自定义登录实例。Liferay是一款开源的企业级门户平台,提供了丰富的功能和强大的定制能力,使得开发者可以根据具体需求进行扩展。自定义登录界面和流程是提升用户...

    Liferay Portal Liferay IDE

    Liferay Portal Liferay IDE

    Liferay开发文档整理.pdf

    Liferay 是一个功能强大的企业级门户解决方案,提供了一个完整的平台,用于构建企业内部网(intranet)、企业外部网(extranet)和Web网站。其核心功能包括内容管理、用户管理和企业级应用程序集成等。Liferay提供一...

    struts2+liferay集成

    总结来说,"struts2+liferay集成"涉及到的主要知识点包括:Liferay IDE和SDK的使用,Portlet的生命周期和开发,Struts2框架的配置和Action机制,以及Liferay服务API的调用。通过这个集成,开发者可以充分利用两者的...

    liferay6.1开发学习

    - 熟悉 Liferay 的服务架构,如何创建和调用服务,以及使用 Service Builder。 - 学习 Liferay 的安全模型,包括角色、权限和访问控制。 - 掌握 Liferay 社区和工作流的实现,如何创建用户组、社区、论坛等社交功能...

    liferay快速入门quickstart

    Liferay Portal是一款功能强大且灵活的企业级门户平台,它基于Java技术,遵循JSR-168标准,提供了丰富的特性来满足企业内外部网站的需求。Liferay Portal 4.0版本作为一款成熟的解决方案,尤其在用户管理、内容管理...

    liferay详细讲解 liferay项目完全讲解

    Liferay是一款开源的企业级门户平台,它提供了丰富的功能和高度可定制性,广泛应用于构建企业网站、内部系统、协作平台等。在这个“liferay详细讲解 liferay项目完全讲解”的资料包中,我们可以期待深入了解到关于...

    liferay跨组件间通信实例

    `test-portlet`可以作为服务提供者,暴露接口供外部调用,也可以作为消费者,调用其他系统的服务。 4. **JavaScript API和AJAX**:对于前端交互,Liferay提供了JavaScript API,允许portlet之间通过Ajax进行通信。`...

    Liferay form机制及例子

    3. **渲染响应**:`processAction`执行完毕后,Liferay会自动调用`render`方法,再次渲染portlet的内容。此时,`render`方法可以访问在`processAction`中设置的渲染参数,从而根据用户的操作更新视图。在示例中,`...

    liferay的oracle部署

    在部署Liferay Portal时,与Oracle数据库的集成是关键步骤。以下是对配置过程的详细解释: 1. **数据库配置修改**: - 首先,你需要在`portal-impl\src\portal.properties`文件中,取消Hypersonic数据库连接的注释...

    liferay经典书籍8本

    内容包括内容管理系统、移动支持、API设计以及与外部系统的集成,让读者了解如何充分利用Liferay DXP的潜力。 7. 《Liferay Portlet Development》 portlet是Liferay中核心的组件形式。本书深入浅出地介绍了portlet...

    liferay扩展环境 liferay ext

    标题 "Liferay扩展环境 Liferay Ext" 涉及到的是Liferay门户平台的一个关键概念,Liferay Ext是用于扩展和定制Liferay功能的核心工具。Liferay是一个开源的企业级内容管理平台,它允许用户根据需求构建自定义的数字...

    liferay 整合struts例子

    Liferay是一款开源的企业级门户平台,它提供了丰富的功能和高度的可扩展性。Struts则是一个经典的MVC(模型-视图-控制器)框架,用于构建Java Web应用程序。将Liferay与Struts整合,可以充分利用Struts的业务逻辑...

    liferay portlet 开发实例

    2. **ext-service\src**:该目录下主要放置服务接口定义,如远程服务接口,便于其他模块或外部系统调用。 3. **portal-web**:用于存放与用户界面交互相关的资源,如JSP页面、HTML、CSS、JavaScript等前端资源。 ##...

    Liferay Mobile SDK

    然而,随着JSON格式在Web服务中的广泛应用,Liferay开始重构其远程服务,引入了基于JSON的远程服务(JSONWS),使得开发者可以更加灵活地调用Liferay提供的各种服务。 ##### 2.2 2014年:Liferay Mobile SDK API ...

Global site tag (gtag.js) - Google Analytics