使用OData安全服务

时间:2010-10-20 13:47:54

标签: authentication generator odata restlet

我想生成实体类和OData安全服务的Service类。 在OData Java扩展页面中写道,我需要使用应该获取uri和输出目录参数的org.restlet.ext.odata.Generator类。 但是,如果我的OData服务受到保护,则生成器实例无法在没有服务的用户名和密码的情况下生成服务类。 我没有找到任何方法将用户名和密码传递给生成器类。

我收到了401 HTTP响应代码。

请帮忙。

2 个答案:

答案 0 :(得分:1)

在org.restlet.ext.odata.Generator类中,在方法main中, 以下代码将清除setCredentials()方法中设置的凭据详细信息。

Service service = new Service(dataServiceUri);
if(service.getMetadata() == null)
{
  errorMessage = "Cannot retrieve the metadata.";
}

请为此问题提供解决方案,因为我目前无法为我的休息服务生成类,因为服务是使用用户密码保护的。

我尝试了以下代码来为我的安全服务uri生成代码:

import org.restlet.ext.odata.Generator;
import org.restlet.ext.odata.Service;
import org.restlet.data.ChallengeResponse;
import org.restlet.data.ChallengeScheme;

public class ODataRestletGenerator extends Service {

    public ODataRestletGenerator(String serviceUri) {
        super(serviceUri);
    }

    public static final String APPLICATION_URI = "http://ldcigkd.xxx.yyy.corp:50033/xxx/opu/sdata/IWCNT/CUSTOMER/";

    public static void main(String[] args) {

        // Add the client authentication to the call
        ChallengeScheme scheme = ChallengeScheme.HTTP_BASIC;
        ChallengeResponse credentials = new ChallengeResponse(scheme, "user", "pwd");       
        new ODataRestletGenerator(APPLICATION_URI).setauth(credentials);

        String[] arguments = { APPLICATION_URI, "/customer/src" };
        Generator.main(arguments);
    }

    private void setauth(ChallengeResponse credentials) {

        super.setCredentials(credentials);
    }

}

答案 1 :(得分:0)

在由OData扩展生成的org.restlet.ext.odata.Service子类中,您可以调用setCredentials()并传递ChallengeResponse的实例,包括scheme(BASIC?),login(标识符)和密码(secret)