Nano Hash - криптовалюты, майнинг, программирование

распаковка объекта JSON в Java без @XMLRootElement

Я работаю над JAX-RS с apache-cxf в качестве реализации. У меня есть служба POST, и я получаю следующую ошибку 400 при десортировке объекта JSON в Java without @XMLRootElement.

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"Customer")

Класс ресурса:

@POST
@Path("/create")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response createCustomer(Customer customer) throws Exception {
------
-------
}

Объект JAXB: в нем нет @XMLRootElement.

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Customer", propOrder = {
"id",
"effectiveDate",
"customerType",
"customerName",
 ---
})
public class Customer extends ObjectBase implements Serializable
{

}

Контекст приложения:

<jaxrs:server id="restContainer" address="/">
    <jaxrs:serviceBeans>
        <ref bean="customerResource"/>
    </jaxrs:serviceBeans>       
</jaxrs:server>

JSON

{
"Customer":
{
    "Id": null,
    "ExternalKey": [
        {
            "NaturalKey": "NaturalKey0",
            "KeyName": "KeyName0",
            "SourceSystem": "XYZ"
        },
        {
            "NaturalKey": "NaturalKey1",
            "KeyName": "KeyName1",
            "SourceSystem": "Sys"
        }
    ],
    "MetaData": {
        "ObjectVersion": "50",
        "ObjectState": "Synchronized",
        "CreatedTime": "2006-05-04T18:13:51.0",
        "ModifiedBy": "ModifiedBy0",
        "ModifiedTime": "2006-05-04T18:13:51.0",
        "Verified": "false"
    },
    "EffectiveDate": "2006-05-04",
    "CustomerType": "ABC",
    "CustomerName": "CustomerName0",
    "CustomerTag": [
        {
            "Key": "Customer Number",
            "Value": "Value0"
        },
        {
            "Key": "Customer EID",
            "Value": "Value1"
        }
    ]
}
}

Я попытался добавить Jettison в качестве поставщика, но неудачно

17.01.2014

  • При выполнении вручную работает JAXBElement<YourClass> вместо YourClass. Может быть, вы могли бы написать перехватчик, делающий это? 17.01.2014
  • каков ваш запрос json?........ не могли бы вы обновить свой пост с запросом JSON 19.01.2014
  • @KaPra Я добавил запрос JSON сейчас. 19.01.2014

Ответы:


1

Я мог бы решить эту проблему, добавив провайдера JAX-RS в качестве JSONProvider. В JSONProvider укажите соответствующее пространство имен для JSON. В этом случае я использовал пустую строку.

<util:map id="jsonNamespaceMap" map-class="java.util.Hashtable">
    <entry key="http://www.mycompany.com/abc/xyz/v1" value=""/>
</util:map>

<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider"> 
    <property name="namespaceMap" ref="jsonNamespaceMap"/>
    <property name="dropRootElement" value="false"/>
    <property name="ignoreMixedContent" value="true"/>
    <property name="serializeAsArray" value="true"/>
</bean> 

Хотя я еще не нашел ответа на несколько вопросов, которые пришли мне в голову -
1. Зачем нам нужен JSONProvider только в случае POST-запроса? Для запроса GET я мог бы получить объект JSON в качестве ответа без добавления JSONProvider.
2. Если у меня есть @XMLRootElement в объекте клиента, мне снова не нужен JSONProvider, и сервис работает, почему?

21.01.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..