我正在嘗試構建排序OData服務。我ODataServiceFactory實施看起來是這樣的: EdmProvider edm = new SortMetaData(); ODataSingleProcessor sortProcessor = new SortProcessor(); return createODataSingleProcessorService(edm, sortProcessor);
501沒有實現OData
內EDM我準備的EntitySet,EntitySetContainer並將它們添加到架構。當我在本地訪問本地主機/ odata.svc/$元我能看到的元數據:
<edmx:Edmx xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx" Version="1.0">
<edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="1.0">
<Schema xmlns="http://schemas.microsoft.com/ado/2008/09/edm" Namespace="com.sudhi.learning">
<EntityType Name="SortNumber">
<Key>
<PropertyRef Name="number_id"/>
</Key>
<Property Name="number_id" Type="Edm.Int16"/>
</EntityType>
<EntityContainer Name="ODataSortNumbersContainer" m:IsDefaultEntityContainer="true">
<EntitySet Name="SortNumbers" EntityType="com.sudhi.learning.SortNumber"/>
</EntityContainer>
</Schema>
</edmx:DataServices>
</edmx:Edmx>
到目前爲止好。現在,如果我試圖把本地主機/ odata.svc/SortNumbers這是我的EntitySet我認爲它會觸發我在ODataSingleProcessor類重新定義一個readEntity方法:
public class SortProcessor extends ODataSingleProcessor{
@Override
public ODataResponse readEntity(GetEntityUriInfo uriInfo, String contentType) throws ODataException {
EdmEntitySet entitySet = uriInfo.getStartEntitySet();
URI serviceRoot = getContext().getPathInfo().getServiceRoot();
ODataEntityProviderPropertiesBuilder properties = EntityProviderWriteProperties.serviceRoot(serviceRoot);
return EntityProvider.writeEntry(contentType, entitySet, Randomizer.fillRandomNumbers(), properties.build());
}
}
但是,一旦我打我的網址得到一個501沒有實現的錯誤。我使用的是春天啓動應用程序,我已經加了我自己的servlet與SpringServletRegistrationBean如下:
@Configuration
public class ServletHandler {
@Bean
public ServletRegistrationBean getODataServletRegistrationBean() {
ServletRegistrationBean odataServletRegistrationBean = new ServletRegistrationBean(new CXFNonSpringJaxrsServlet(), "/odata.svc/*");
Map<String, String> initParameters = new HashMap<String, String>();
initParameters.put("javax.ws.rs.Application", "org.apache.olingo.odata2.core.rest.app.ODataApplication");
initParameters.put("org.apache.olingo.odata2.service.factory", "com.sudhi.learning.SortServiceFactory");
odataServletRegistrationBean.setInitParameters(initParameters);
return odataServletRegistrationBean;
}
}
我相信,我錯過了一些設置在設置servlet的,但也不太清楚。 需要幫助!