如何使用外部应用程序来使用Liferay Web服务?

时间:2012-03-08 20:45:07

标签: web-services liferay-6 axis

我在Glassfish 3.1.1上运行Liferay 6.1 CE。

据我了解,Liferay通过网络服务公开其API。我希望使用Liferay的这个功能,因为我希望有一个应用程序 external 到Liferay(在我们的例子中,我们的销售提案应用程序)创建门户网站用户。 我已经尝试了我可以在网上找到的所有内容,但仍然无法获得有效的请求。 作为一个简单的用例,我开始只是尝试使用getUserByEmailAddress服务,我甚至无法完成这项工作。我觉得我最接近的是查询http://localhost:8080/api/secure/axis/Portal_UserService,然后获取

  

java.rmi.RemoteException:没有用户存在密钥{companyId = 12098,emailAddress = ben2 @ greenportal.com}

对于不存在的用户,即。此回复 有效,并且

  

java.rmi.RemoteException:PermissionChecker未初始化

对于实际存在的用户。无论我是通过soapUI还是我的JUnit代码运行SOAP请求,我都得到了相同的响应。

我已将portal-ext.properties修改为具有相应的(?)条目:

#for web service access
axis.servlets.hosts.allowed=127.0.0.1,SERVER_IP,localhost,XXX.XXX.XXX.XXX
axis.servlet.https.required=false

(XXX.XXX ...是我机器的实际IP地址) 以及我的代码的相关部分:

UserAdmin.java

...
static UserServiceSoap proxy = null;

public UserAdmin() {
    try {
        proxy = PortalProxy.getProxy();
    } catch (MalformedURLException e) {
        logger.error("Malformed URL encountered when generating proxy in UserAdmin constructor");
        e.printStackTrace();
    } catch (ServiceException e) {
        logger.error("Service Exception encountered when generating proxy in UserAdmin constructor");
        e.printStackTrace();
    }
}

public UserSoap getUser(long companyId, String emailAddress) {
    UserSoap requestedUser = null;
    String possibleError = null;

    //if proxy hasn't been created yet, create it now.
    checkProxyConnection();
    try {
        requestedUser = proxy.getUserByEmailAddress(companyId, emailAddress);
        logger.debug("Found user for "+emailAddress);
    } catch (RemoteException e) {
        requestedUser = null;
        possibleError = e.getMessage();
    }
    if(requestedUser != null) {
        logger.info("Returning requested user: " + requestedUser.getEmailAddress());
    } else {
        logger.info("Requested user for email address \""+emailAddress+"\" not found. Returning null.");
        logger.info(possibleError);
    }
    return requestedUser;
}

...

PortalProxy.java

...
    public static UserServiceSoap getProxy()
        throws MalformedURLException, ServiceException {

    UserServiceSoapServiceLocator svc = new UserServiceSoapServiceLocator();
    UserServiceSoap userSoap = svc.getPortal_UserService(new URL("http://localhost:8080/api/axis/Portal_UserService"));

//      makes no difference if these are commented or uncommented       
//      ((Portal_UserServiceSoapBindingStub)userSoap).setUsername(Constants.LIFERAY_USERNAME);
//      ((Portal_UserServiceSoapBindingStub)userSoap).setPassword(Constants.LIFERAY_PASSWORD);

        return userSoap;
    }
...

我在这个主题上找到的所有liferay论坛帖子都没有产生任何有用的东西,大部分都适用于Tomcat包。这可能是Glassfish特有的问题吗? 几个星期以来,我一直在苦苦思索这个问题并完全没有想法。如果有人有任何建议,帮助,链接,教程等消费Liferay服务,我将非常感激。

由于

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

我通过删除并重新创建Liferay数据库来修复此问题。

我的“lportal”数据库中肯定会出现某种情况。我删除了数据库并删除了我的portal-setup-wizard.properties& portal-ext.properties文件。服务器重新启动并完成设置向导后,我重新尝试了Junit测试并完成了工作!没有代码更改或任何东西,只是数据库擦除和重新创建,现在一切都很好。太令人沮丧了!

显然,这不是一个理想的解决方案,而且一旦我们投入生产,它就会让我非常担心Liferay会如何表现。