参考文章:
?http://support.liferay.com/browse/LEP-1319
?
或者在http://support.liferay.com/secure/QuickSearch.jspa?去搜索 soap 关键字
?
5.0.1 的版本我怀疑存在bug,直接在浏览器中输入这样的URL:http://localhost:8080/tunnel-web/axis/Portal_ClassNameService?都会报错,懒得理他了
?
5.1 的版本正常
?
从5.X 的版本开始,提供了三种方式,也就是UserID(4.x 好像只有这一种,可以从com.liferay.portal.servlet.filters.secureSecureFilter.java 中看的出来),Email和ScreenName ,为了进行这几种区分,提供了后缀的方式进行判断,例如如果是userID ,则需要带上 @uid,例如 2◎uid; 如果是screenname ;则需要带上 @sn,例如joebloggs@sn。默认的方式就是通过Email,因此就无需后缀了。
?
密码可以传递明文,也可以传递加密后的,这个在portal.properties 中的portal.jaas.strict.password=false 可以进行控制
测试代码(5.1)
?
package test;
?
import java.net.URL;
import org.apache.axis.client.Stub;
import com.liferay.client.portal.model.ClassNameSoap;
import com.liferay.client.portal.model.UserSoap;
import com.liferay.client.portal.service.http.ClassNameServiceSoap;
import com.liferay.client.portal.service.http.ClassNameServiceSoapServiceLocator;
import com.liferay.client.portal.service.http.UserServiceSoap;
import com.liferay.client.portal.service.http.UserServiceSoapServiceLocator;
/**
?* 使用Liferay 提供的Soap服务的例子
?* @author rockyzheng
?*/
public class SoapTest {
?/**
? * 测试不需要认证的,也就是不需要用户登录的Service
? * 例如Classname
? */
?private void testUnAuthedSoap(){
??
??try{
???ClassNameServiceSoapServiceLocator locator = new ClassNameServiceSoapServiceLocator();
???ClassNameServiceSoap soap = locator.getPortal_ClassNameService(getURL("Portal_ClassNameService",false));
???ClassNameSoap nameSoap = soap.getClassName(10001);
???System.out.println(nameSoap.getValue());???
??}catch (Exception e) {???
???e.printStackTrace();
??}??
?}?
?
?/**
? * 测试需要认证的,也就是需要登录的Service
? * 例如用户服务
? */
?private void testAuthedSoap() {
??try{
???UserServiceSoapServiceLocator locator = new UserServiceSoapServiceLocator();
???UserServiceSoap soap = locator.getPortal_UserService(getURL("Portal_UserService",true));
???if (soap instanceof Stub){
????Stub stub = (Stub)soap;
????//stub.setUsername("2@uid"); //UID
????//stub.setUsername("test@liferay.com");//Email
????stub.setUsername("joebloggs@sn"); //ScreenName????
????stub.setPassword("test");
???}
???UserSoap userSoap = soap.getUserById(2);
???System.out.println(userSoap.getGreeting());
??}catch (Exception e) {
???e.printStackTrace();
???
??}
?}
?
?private URL getURL(String serviceName,boolean authenticatedUrl) throws Exception{
??String url;
??if (authenticatedUrl){???
???url = "http://@192.168.1.12:8080/tunnel-web/secure/axis/" + serviceName;
??}else{
???url = "http://192.168.1.12:8080/tunnel-web/axis/" + serviceName;
??}?
??return? new URL(url);
??
?}
?
?
?public static void main(String[] args) {
??SoapTest test = new SoapTest();
?
??test.testUnAuthedSoap();
??test.testAuthedSoap();
?}
}
?
运行环境中需要的lib 则下载对应版本的liferay-portal-client,将下面所需要的包都丢进去,例如 liferay-portal-client-5.1.0。
?
4.4.1 的版本是存在Bug 的,参考http://support.liferay.com/browse/LEP-4480?,需要将util-java.jar? 移动到tomcat/common/lib/ext 下面去,然后代码中只需要改动的地方是 :setuid(2),其他没有变化。
4.4.1中不移动会抛出的错误:
?
AxisFault
?faultCode: {http://xml.apache.org/axis/}HTTP
?faultSubcode:
?faultString: (403)Access to the requested resource has been denied
?faultActor:
?faultNode:
?faultDetail:
?{}:return code:? 403
<html><head><title>Apache Tomcat/5.5.25 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 403 - Access to the requested resource has been denied</h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u>Access to the requested resource has been denied</u></p><p><b>description</b> <u>Access to the specified resource (Access to the requested resource has been denied) has been forbidden.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/5.5.25</h3></body></html>
?{http://xml.apache.org/axis/}HttpErrorCode:403
(403)Access to the requested resource has been denied
?at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:744)
?at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)
?at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
?at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
?at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
?at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
?at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
?at org.apache.axis.client.Call.invoke(Call.java:2767)
?at org.apache.axis.client.Call.invoke(Call.java:2443)
?at org.apache.axis.client.Call.invoke(Call.java:2366)
?at org.apache.axis.client.Call.invoke(Call.java:1812)
?
?
嘿嘿,折磨了几天了,终于搞好了,开源的这个东西啊,咋说来?