当前位置: 首页 > 知识库问答 >
问题:

Olingo-为OData服务的客户机库创建强类型POJO

冯驰
2023-03-14

我使用Apache Olingo作为Java SDK的OData客户机,我将为RESTful OData API提供Java SDK。在SDK中,我希望能够有强类型的类来表示OData实体。我很难轻松地实现这一点,因此觉得我错过了一个不同的策略。

Olingo的方法似乎是获取一个Odataclient对象,该对象为用户提供了一系列用于与API交互的有用方法。ODataClient使用一系列工厂方法来构建我的请求。例如,这是我用来从Northwind示例OData服务获取customers的代码。Client是必要的ODataClient类的一个实例。

String serviceRoot = "http://services.odata.org/V4/Northwind/Northwind.svc";
URI customersUri = client.newURIBuilder(serviceRoot)
        .appendEntitySetSegment("Customers").build();
ODataRetrieveResponse<ODataEntitySetIterator<ODataEntitySet, ODataEntity>> response =
        client.getRetrieveRequestFactory().getEntitySetIteratorRequest(customersUri).execute();

if (response.getStatusCode() >= 400) {
    log("Error");
    return;
}

ODataEntitySetIterator<ODataEntitySet, ODataEntity> iterator = response.getBody();

while (iterator.hasNext()) {
    ODataEntity customer = iterator.next();
    log(customer.getId().toString());
}

我希望从迭代器获得一个强类型实体(即customer customer=iterator.next())。然而,我不确定如何真正做到这一点。

我错过了什么?

共有1个答案

余阳秋
2023-03-14

它并没有真正被宣传,但现在在Olingo中有一个POJO生成器,在ext/pojogen-maven-plugin的源代码树中。不幸的是,对于使用POJOs,添加了另一个具有不同编程模型的层,该层保存缓存在内存中的实体,并在刷新操作中与OData服务同步。我真的很有兴趣将它调整为基于Olingos请求工厂的更传统的请求/响应模型。

但是,你可以尝试一下。在您的pom中包括pojogen-maven-plugin和odata-client-proxy。POJO生成可以在pom中触发

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.8</version>
        <executions>
            <execution>
                <phase>process-sources</phase>
                <goals>
                    <goal>add-source</goal>
                </goals>
                <configuration>
                    <sources>
                        <source>${project.build.directory}/generated-sources</source>
                    </sources>
                </configuration>
            </execution>
        </executions>
    </plugin>

    <plugin>
        <groupId>org.apache.olingo</groupId>
        <artifactId>pojogen-maven-plugin</artifactId>
        <version>4.2.0-SNAPSHOT</version>
        <configuration>
            <outputDirectory>${project.build.directory}/generated-sources</outputDirectory>
            <localEdm>${basedir}/src/main/resources/metadata.xml</localEdm>
            <basePackage>odata.test.pojo</basePackage>
        </configuration>
        <executions>
            <execution>
                <id>v4pojoGen</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>v4pojoGen</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>

对于这个实验,我将Olingo汽车示例服务的EDM元数据存储在src/main/resources/metadata.xml。不知何故,插件希望创建一个inbetween ojc-plugin文件夹,我只是手动将生成的Java代码移到了适当的位置。

Service<EdmEnabledODataClient> service = odata.test.pojo.Service.getV4("http://localhost:9080/odata-server-sample/cars.svc");
Container container = service.getEntityContainer(Container.class);
for (Manufacturer m : container.getManufacturers()) {
    System.out.println(m.getName());
}
 类似资料:
  • 我试图使用apache olingo library 2.0版本创建一个odata服务。下面是web.xml中的内容: 使用上面的servlet映射,当我加载URL“localhost:8888/sample/$metadata”时,我会得到以下错误: 并加载URL“localhost:8888/$metadata”,它可以正常工作并加载元数据: 请帮助我解决这个问题。 谢谢,凯沙夫

  • ODataJClient,其github页面显示它现在是Olingo项目的一部分。 Odata4j Apache Olingo是否支持OData V3?

  • 我已经尝试了这两个库的入门文档,但它们都以“首先我们将实现一个Web服务”开始,并没有清楚地描述(至少对我来说)这将在哪里结束,纯Odata将在哪里开始。 谢了。

  • 我是java和web服务以及的新手。我最近使用一些教程创建了一个web服务。当我第一次学习eclipse教程时,让我创建一个客户机。但是当我尝试创建一个新项目和一个新的web服务客户机时,它会给出。具体如下所示: im使用Axis2-1.6.1,它说java遵从性级别是6,我搜索了一下,但是找不到解决这个问题的相关方案。感谢任何帮助。

  • NewTLSServer创建的服务器可以验证对显式从其创建的客户端的调用: 在行中。 但是,我有一个生产程序,我想将其设置为使用作为主机。我越来越 我称之为错误。 我如何设置与客户端进行身份验证,就像普通的HTTPS服务器一样?

  • 关于Netflix Eureka Service Registry,我已经成功地使用Tomcat8.0.35设置了Eureka Netflix服务器。我还得到了基本的示例服务&客户端来进行相互通信。我对Eureka还是个新手,管理层决定将Eureka与Spring一起使用,因为几个新的应用程序都是围绕Spring框架编写的。 null 我希望为大多数非AWS云实例配置服务和客户端。Eureka W