调用wso2管理服务SOAPUI

时间:2013-06-26 04:52:02

标签: wso2 wso2esb

我正在研究wso2管理服务。对于AuthencticationAdmin,我的网址为http://localhost:9763/services/AuthenticationAdmin?wsdl

现在,当我点击登录操作时,使用admin,admin,127.0.0.1,我返回时返回true。

ESB控制台显示已登录。

现在,当我点击退出操作时,我没有得到任何回复。

此外,我注意到响应的标头不包含任何会话ID。

我的ESB是4.6.0。

登录请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:aut="http://authentication.services.core.carbon.wso2.org">
   <soapenv:Header/>
   <soapenv:Body>
      <aut:login>
         <!--Optional:-->
         <aut:username>admin</aut:username>
         <!--Optional:-->
         <aut:password>admin</aut:password>
         <!--Optional:-->
         <aut:remoteAddress>127.0.0.1</aut:remoteAddress>
      </aut:login>
   </soapenv:Body>
</soapenv:Envelope>

登录回复:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Body>
      <ns:loginResponse xmlns:ns="http://authentication.services.core.carbon.wso2.org">
         <ns:return>true</ns:return>
      </ns:loginResponse>
   </soapenv:Body>
</soapenv:Envelope>

在回复中,当我点击登录时,我看到,在底部我只在标题中获得6个元素,如下所示:

> Date Tue, 25 Jun 2013 14:31:42 GMT
> Transfer-Encoding chunked
> #status# HTTP/1.1 200 OK
> Content-Type text/xml; charset=UTF-8
> Connection Keep-Alive
> Server WSO2-PassThrough-HTTP

现在,我没有获得会话ID。你能指出我哪里错了吗?

我的方案是我想登录WSO2,然后点击其他一些管理服务操作。

2 个答案:

答案 0 :(得分:5)

使用java客户端调试一段时间后(参见我的其他答案),我注意到SOAPUI端点没有使用我在Java客户端中使用的 9443 端口。见下图。

enter image description here

8243 端口是由SOAPUI从WSDL中选取的。

当我将SOAP UI端点端口从 8243 更改为 9443 时,JSESSIONID将在响应中返回,如下所示:

HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=573D42750DE6C0A287E1582239EB5847; Path=/; Secure; HttpOnly
Content-Type: text/xml;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 26 Jun 2013 22:14:20 GMT
Server: WSO2 Carbon Server

<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns:loginResponse xmlns:ns="http://authentication.services.core.carbon.wso2.org"><ns:return>true</ns:return></ns:loginResponse></soapenv:Body></soapenv:Envelope>

我不知道端口8243和9443之间有什么区别,或者为什么一个返回JSESSIONID而另一个没有。

答案 1 :(得分:1)

您可以尝试使用Java客户端访问服务器。有一个例子here。您可以尝试此示例并转储SOAP消息,以查看与您在SOAPUI中看到的内容的区别。

我想知道示例axis client's setManageSession(true)是否会对会话产生一些魔力:

public static void main(String[] args) throws 
            RemoteException, AuthenticationAdminAuthenticationExceptionException {

    System.setProperty("javax.net.ssl.trustStore", 
                        SampleConstants.CLIENT_TRUST_STORE_PATH);
    System.setProperty("javax.net.ssl.trustStorePassword", 
                        SampleConstants.KEY_STORE_PASSWORD);
    System.setProperty("javax.net.ssl.trustStoreType", 
                        SampleConstants.KEY_STORE_TYPE);

    AuthenticationAdminStub stub = 
          new AuthenticationAdminStub(
                 "https://localhost:9443/services/AuthenticationAdmin");
    ServiceClient client = stub._getServiceClient();
    Options options = client.getOptions();
    options.setManageSession(true);

    Login login = new Login();
    login.setUsername("admin");
    login.setPassword("admin");
    stub.login(login);

    ServiceContext serviceContext = stub.
            _getServiceClient().getLastOperationContext().getServiceContext();
    String sessionCookie = (String) serviceContext
                               .getProperty(HTTPConstants.COOKIE_STRING);

    System.out.println(sessionCookie);      
}

上面的代码打印出类似于以下内容的内容:

JSESSIONID=844ECBED015805A24FF9DBD5F5A56C8D; Path=/; Secure=null; HttpOnly=null