Я пытаюсь использовать odata4j lib, чтобы сделать сообщение OData на клиентском сервере. Я делаю это, создавая пользовательский CursorWrapper, чтобы получить тип каждого столбца. Кажется, что независимо от того, что я делаю, я получаю ошибку "406 Not Acceptable".
Odata4j javadocs не самые большие, и существует серьезная нехватка примеров как на сайте odata4j, так и в общих поисковых системах Google. Я даже не уверен, как регистрировать то, что отправляется на сервер OData (я уверен, что это сделает ошибку понятной). Кажется, нет очевидной функции, чтобы получить сообщение xml в строку.
Итак, мой вопрос - вопрос из двух частей: 1. Как вы регистрируете транзакции из odata4j lib? 2. Что, во всяком случае, неверно в моей логике, чтобы сделать запись OData с помощью odata4j?
Ниже приведен фрагмент кода. Любая помощь будет принята с благодарностью.
// 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 row
while (cursorWrapper.isAfterLast() == false) {
// Iterate through each cursor 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);
Сообщите мне, что вы узнали.
Надеюсь, что это поможет,
- john