2016-08-24 7 views
0

Я пытаюсь загрузить json в json Column type в Postgresql, используя Arquillian и Wildfly Server. Так что в основном я написал тест InContainer.Загрузка Json в качестве типа столбца с использованием настроек Arquillian и Wildfly

@Test 
@UsingDataSet("datasets/contracts/contracts.yml") 

public void FindContractByContractCodeAndUserId_ValidContractResponse() { 

    ContractResponse contractResponse = contractBoundary.getContractByContractCodeAndUserId("0816QMCG", 1); 
    assertThat(contractResponse, notNullValue()); 
    assertThat(contractResponse.getAmount(), is(800.0)); 
    assertThat(contractResponse.getDescription(), is("MacBook")); 
    assertThat(contractResponse.getImageLink(), is("http://dasdas.de/")); 
    assertThat(contractResponse.isShowOnMarketplace(), is(false)); 
    assertThat(contractResponse.getStatus(), is(ContractStatusEnum.PENDING)); 
} 

Файл YML это содержит столбец, который является JSON типа, что-то, как показано ниже:

данных: { "данные": { "newAmount": 700.23}}

приложение это сам может хранить json-тип в postgresql.

Теперь я пишу тест InContainer, который будет загружать данные в базу данных с памятью H2, но я проверил, что H2 не поддерживает json, поэтому я перешел на использование postgresql и развернул драйвер psql, но когда я я всегда получаю следующую ошибку:

java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) в java.lang.Thread.run (Thread.java:745) Вызвано: org.dbunit.dataset.NoSuchColumnException: contract_events.DATA - (Неверный вводный столбец: данные) в карте кеша ColumnNameToIndexes. Обратите внимание, что имена столбцов карты НЕ чувствительны к регистру. на org.dbunit.dataset.AbstractTableMetaData.getColumnIndex (AbstractTableMetaData.java:117) в

И в тесте не удается засеять базу данных. !!!!

ответ

0

Это означает, что DBUnit, который используется под капотом, не может найти столбец с именем DATA. Используете ли вы подходящую фабрику данных для dbunit? Для Arquillian Persistence Extension вы можете настроить его в arquillian.xml следующим образом:

<extension qualifier="persistence-dbunit"> 
    <property name="datatypeFactory">org.dbunit.ext.postgresql.PostgresqlDataTypeFactory</property> 
</extension> 
+0

Спасибо за ответ, но это не помогло, так как я понимаю, это позволяет arquillian (дб блок под капотом) в основном использовать данные PostGreSQL тип. Столбец, который я посеял, - это тип json. Можно ли сказать, что dbUnit не поддерживает тип json для целей посева. ? Оставайтесь, если для этого есть работа, это будет здорово. – chand

+0

Если бы вы могли поделиться проектом на GH, я мог бы взломать его, отправить PR и прокомментировать здесь для остальных :) –

+0

[PostgresqlDataTypeFactory] (https://sourceforge.net/p/dbunit/code.git/ci/master/tree /dbunit/src/main/java/org/dbunit/ext/postgresql/PostgresqlDataTypeFactory.java) не поддерживает типы 'json' или' jsonb'. См. Исходный код для списка дополнительных поддерживаемых типов. – czerny