繁体   English   中英

未实现Olingo OData V2读取属性

[英]Olingo OData V2 Read Property not implemented

我使用EclipseLink在与JPA的connectin中使用Apache Olingo V2实现了OData V2服务。 所有请求都工作正常,但是到了这一点,我想通过来自实体集的GET请求(如以下URL)访问单个属性:

http:// localhost:8080 / MyODataService / XXXXXX.svc / EntitySet(12345)/ Property

返回的响应是:

<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<code/>
           <message xml:lang="de-DE">Not implemented</message>
</error>

扩展ODataJPASeviceFactory的类如下所示:

import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.apache.olingo.odata2.jpa.processor.api.ODataJPAContext;
import org.apache.olingo.odata2.jpa.processor.api.ODataJPAServiceFactory;
import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPARuntimeException;


public class JPAODataServiceFactory extends ODataJPAServiceFactory
{

    private static final String PERSISTENCE_UNIT_NAME = "MyPersistenceUnitName";

    @Override
    public ODataJPAContext initializeODataJPAContext() throws ODataJPARuntimeException
    {

        ODataJPAContext oDatJPAContext = this.getODataJPAContext();
        try
        {
            EntityManagerFactory emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
            oDatJPAContext.setEntityManagerFactory(emf);
            oDatJPAContext.setPersistenceUnitName(PERSISTENCE_UNIT_NAME);

            return oDatJPAContext;

        } catch (Exception e)
        {

            throw new RuntimeException(e);

        }

    }

现在我的问题是:如何实现功能,以便不仅可以对整个实体集执行GET和POST请求,而且还可以针对实体集的单个属性(如我尝试使用上述URL一样)进行GET和POST请求?

如果您使用Olingo JPA扩展,则当前无法实现从一个实体访问单个属性。

如果要支持此行为,则可以注册自定义处理器,并且仅覆盖“ readEntityComplexProperty”和“ readEntitySimpleProperty”方法。 在那里,您可以拥有自定义代码,您可以在其中专门获取值。 您不重写的每个方法都将导致执行标准Olingo功能。

这是有关如何注册自定义JPA处理器的教程: http : //olingo.apache.org/doc/odata2/tutorials/CustomODataJPAProcessor.html

这是关于如果您自己实现功能的代码的示例: https : //github.com/apache/olingo-odata2/blob/597465569fdd15976d0486711d4a38f93a7c6696/odata2-lib/odata-ref/src/main/java/ org / apache / olingo / odata2 / ref / processor / ListsProcessor.java#L592

您需要在实体集之间创建关联。 例如,要访问以下URL: http:// localhost:8080 / myService.svc / Cars ('6')/ Manufacturer,您需要在汽车与制造商关联集之间创建关联。 看看文档: https : //olingo.apache.org/doc/odata2/tutorials/basicread.html

黑格

您可以使用

http:// localhost:8080 / MyODataService / XXXXXX.svc / EntitySet(12345)/ ?$ select =属性

再见

多梅尼科

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM