我正在尝试使用odata4j库将OData发布到客户端的服务器。我通过创建一个自定义的CursorWrapper来获取每个列的类型来做到这一点。看来,不管我做什么,都会收到“ 406 Not Acceptable”错误。

odata4j javadocs并不是最好的,并且在odata4j网站以及一般的google搜索中都严重缺乏示例。我什至不知道如何记录发布到OData服务器的内容(我敢肯定会清除错误)。似乎没有明显的功能可以将xml发布到字符串。

所以,我的问题是一个两部分的问题:
1.如何记录来自odata4j库的事务?
2.如果使用odata4j进行OData发布,在我的逻辑中有什么问题(如果有的话)?

我在下面包含一个代码段。任何帮助将不胜感激。

    // Create the ODataConsumer with the appropriate credentials
    OClientBehavior basicAuth = new BasicAuthenticationBehavior(Config.dbfile +
                                    "\\" + Config.username, Config.password);
    ODataConsumer consumer = ODataConsumer.create(url, basicAuth);

    // Make sure there are results in the cursor
    if ( cursorWrapper.moveToFirst() ){

        // create the new product
        OCreateRequest<OEntity> newMaterial =
            consumer.createEntity( "ESvcOrderTrans" );
        // Iterate through each cursor's row
        while (cursorWrapper.isAfterLast() == false) {
            // Iterate through each cursor's columns
            for ( int i=1; i < cursorWrapper.getColumnCount(); i++ ){
                // Determine type of key
                    switch ( cursorWrapper.getType(i) ){
                        case CustomCursorWrapper.FIELD_TYPE_INTEGER :
                            if (cursorWrapper.isNull(i)){
                                createRequest.properties(OProperties.null_(
                                        cursorWrapper.getColumnName(i),
                                        "Edm.Int32"));
                            } else {
                                createRequest.properties(   OProperties.int32(
                                        cursorWrapper.getColumnName(i),
                                        cursorWrapper.getInt(i)));
                            }
                            break;
                        case CustomCursorWrapper.FIELD_TYPE_STRING :
                            if (cursorWrapper.isNull(i)){
                                createRequest.properties(OProperties.null_(
                                        cursorWrapper.getColumnName(i),
                                        "Edm.String"));
                            } else {
                                createRequest.properties(OProperties.string(
                                        cursorWrapper.getColumnName(i),
                                        cursorWrapper.getString(i)));
                            }
                            break;
                        case CustomCursorWrapper.FIELD_TYPE_FLOAT :
                            if (cursorWrapper.isNull(i)){
                                createRequest.properties(OProperties.null_(
                                        cursorWrapper.getColumnName(i),
                                        "Edm.Double"));
                            } else {
                                createRequest.properties(OProperties.decimal(
                                        cursorWrapper.getColumnName(i),
                                        cursorWrapper.getFloat(i)));
                            }
                            break;
                        case CustomCursorWrapper.FIELD_TYPE_BLOB :
                            if (cursorWrapper.isNull(i)){
                                createRequest.properties(OProperties.null_(
                                        cursorWrapper.getColumnName(i),
                                        "Edm.Binary"));
                            } else {
                                createRequest.properties(OProperties.binary(
                                        cursorWrapper.getColumnName(i),
                                        cursorWrapper.getBlob(i)));
                            }
                            break;
                        case CustomCursorWrapper.FIELD_TYPE_NULL :
                            break;
                    }
            }

            // Execute the OData post
            newMaterial.execute();
            // Move to the next cursor
            cursorWrapper.moveToNext();
        }
    }

最佳答案

要记录所有http流量:

ODataConsumer.dump.all(true);


让我知道你发现了什么。

希望能有所帮助,
- 约翰

关于java - 尝试在android/java中使用odata4j发布到odata服务器的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6228156/

10-11 14:45