2012-12-03 4 views
0

내가 하나로, OData 서버에 안드로이드에서 일부 데이터를 배치하려고 시도하고있다 :안드로이드 odata4j 소비자 EntitySet을 찾을 수 없습니다

<edmx:Edmx Version="1.0"> 
    <edmx:DataServices m:DataServiceVersion="1.0" m:MaxDataServiceVersion="3.0"> 
    <Schema Namespace="DBModel"> 
     <EntityType Name="insertData"> 
     <Key> 
      <PropertyRef Name="ID"/> 
     </Key> 
     <Property Name="ID" Type="Edm.Guid" Nullable="false"/> 
     <Property Name="double_data" Type="Edm.Double"/> 
     </EntityType> 
    </Schema> 
    <Schema Namespace="Data"> 
     <EntityContainer Name="DataEntities" m:IsDefaultEntityContainer="true" p6:LazyLoadingEnabled="true"> 
     <EntitySet Name="insertStuff" EntityType="DBModel.insertData"/> 
     </EntityContainer> 
    </Schema> 
    </edmx:DataServices> 
</edmx:Edmx> 

서버로 데이터를 전송하는 나의 방법 :

public class DataTransmitter { 
    String serviceUrl = "http://url.tld/Data.svc"; 
    String entitySet = "insertStuff"; 

    ODataJerseyConsumer c = ODataJerseyConsumer.newBuilder(serviceUrl).build(); 

    void sendData(double data, UUID uuid) throws Exception { 
    OEntity newLocation = c.createEntity(entitySet) 
     .properties(OProperties.guid("ID", uuid.toString())) 
     .properties(OProperties.double_("double_data", data)) 
     .execute(); 
} 

내가 때마다 시작 응용 프로그램 나는 adb logcat에 다음과 같은 오류가 발생합니다 :

org.odata4j.exceptions.NotFoundException: EdmEntitySet insertStuff is not found 

는 내가 일을 포함해야 할 것 같아요 e 네임 스페이스 DBModel 어떻게 든. 그러나 나는 어떻게되는지 모르며 문서에서 찾을 수없는 것 같습니다.

EDIT : 클라이언트가 서버로부터받는 내용을 보려면 ODataConsumer.dump.all(true); 줄을 포함 시켰습니다. 위의 출력과 같이 전체 $metadata을 볼 수 있습니다.

I/System.out(2984): GET http://url.tld/Data.svc/$metadata 
I/System.out(2984): Accept: application/xml 
I/System.out(2984): User-Agent: odata4j.org 
I/System.out(2984): Status: 200 
I/System.out(2984): Cache-Control: no-cache 
I/System.out(2984): Content-Length: 1455 
I/System.out(2984): Content-Type: application/xml;charset=utf-8 
I/System.out(2984): DataServiceVersion: 1.0; 
I/System.out(2984): Date: Tue, 04 Dec 2012 17:39:34 GMT 
I/System.out(2984): Server: Microsoft-IIS/7.5 
I/System.out(2984): X-Android-Received-Millis: 1354642777769 
I/System.out(2984): X-Android-Sent-Millis: 1354642777536 
I/System.out(2984): X-AspNet-Version: 4.0.30319 
I/System.out(2984): X-Content-Type-Options: nosniff 
I/System.out(2984): X-Powered-By: ASP.NET 
I/System.out(2984): <edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx"> 
I/System.out(2984): <edmx:DataServices m:DataServiceVersion="1.0" m:MaxDataServiceVersion="3.0" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> 
I/System.out(2984):  <Schema Namespace="DBModel" xmlns="http://schemas.microsoft.com/ado/2009/11/edm"> 
I/System.out(2984):  <EntityType Name="insertData"> 
I/System.out(2984):   <Key> 
I/System.out(2984):   <PropertyRef Name="ID" /> 
I/System.out(2984):   </Key> 
I/System.out(2984):   <Property Name="ID" Type="Edm.Guid" Nullable="false" /> 
I/System.out(2984):   <Property Name="double_data" Type="Edm.Double" /> 
I/System.out(2984):  </EntityType> 
I/System.out(2984):  </Schema> 
I/System.out(2984):  <Schema Namespace="Data" xmlns="http://schemas.microsoft.com/ado/2009/11/edm"> 
I/System.out(2984):  <EntityContainer Name="DataEntities" m:IsDefaultEntityContainer="true" p6:LazyLoadingEnabled="true" xmlns:p6="http://schemas.microsoft.com/ado/2009/02/edm/annotation"> 
I/System.out(2984):   <EntitySet Name="insertStuff" EntityType="DBModel.insertData" /> 
I/System.out(2984):  </EntityContainer> 
I/System.out(2984):  </Schema> 
I/System.out(2984): </edmx:DataServices> 
I/System.out(2984): </edmx:Edmx> 

그래서 클라이언트는 EntitySet insertStuff에 액세스하는 서버 에 연결할 수 있습니다. 그러나 여전히이 여기에 버그 postet 관련이 있다는 오류

E/MainActivity( 987): null 
E/MainActivity( 987): org.odata4j.exceptions.NotFoundException: EdmEntitySet insertStuff is not found 
E/MainActivity( 987): at org.odata4j.edm.EdmDataServices.getEdmEntitySet(EdmDataServices.java:55) 
E/MainActivity( 987): at org.odata4j.internal.EdmDataServicesDecorator.getEdmEntitySet(EdmDataServicesDecorator.java:36) 
E/MainActivity( 987): at org.odata4j.consumer.ConsumerCreateEntityRequest.execute(ConsumerCreateEntityRequest.java:42) 
. 
. 
. 
E/MainActivity( 987): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/MainActivity( 987): at android.os.Looper.loop(Looper.java:137) 
E/MainActivity( 987): at android.app.ActivityThread.main(ActivityThread.java:4966) 
E/MainActivity( 987): at java.lang.reflect.Method.invokeNative(Native Method) 
E/MainActivity( 987): at java.lang.reflect.Method.invoke(Method.java:511) 
E/MainActivity( 987): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
E/MainActivity( 987): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 
E/MainActivity( 987): at dalvik.system.NativeStart.main(Native Method) 

답변

1

것 같다에게 보여줍니다 Issue 226: odata4j doesn't recognize WCF-$metadata correctly

그래서 내가해야 할 일을했을 모두가 odata4j-0.8.0-를 만드는 것을 수정하기 현재 odata4j 소스를 기반으로 SNAPSHOT-clientbundle.jar. 수정 사항은 이미 0.8.0-SNAPSHOT (Issue 226 fix)에 포함되어 있기 때문에

버그 신고를 참조하기 전에 여기에서 묻는 것에 대해 죄송합니다!

+0

너무 나쁜 odata4j가 포기되었습니다. 나는이 문제를 4 시간 동안 풀려고했다. odata4j 이외의 다른 WCF 용 OData 클라이언트가 있습니까? – Nestor

관련 문제