标签: jettison

如何强制jettison写一个数组,即使数组中只有一个元素?

通过以下简化示例:

我按预期得到以下内容:

{"person":{"name":"john","tags":["tag1","tag2"]}}
Run Code Online (Sandbox Code Playgroud)

但是,如果我只设置一个标签,我会得到这个:

{"person":{"name":"john","tags":"tag1"}}
Run Code Online (Sandbox Code Playgroud)

我期待得到这个:

{"person":{"name":"john","tags":["tag1"]}}
Run Code Online (Sandbox Code Playgroud)

也就是说,jettison删除了标签的数组,因为数组中只有一个元素.

我觉得这很不安全.

即使只有一个元素,如何强制jettison写一个数组?

注意:我知道还有其他替代方法,例如StAXON.但是,我在这里问如何使用Jettison实现这一目标.请不要建议另一种替代方案.

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.*;

import java.io.*;
import javax.xml.bind.*;
import javax.xml.stream.XMLStreamWriter;
import org.codehaus.jettison.mapped.*;


public class JettisonTest {
    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Person.class);

        Person person = new Person();
        person.name = "john";
        person.tags.add("tag1");
        person.tags.add("tag2");

        Configuration config = new Configuration();
        MappedNamespaceConvention con = new MappedNamespaceConvention(config);
        Writer writer = new OutputStreamWriter(System.out);
        XMLStreamWriter xmlStreamWriter = new MappedXMLStreamWriter(con, writer);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.marshal(person, xmlStreamWriter);
    }
} …
Run Code Online (Sandbox Code Playgroud)

xml arrays jettison

17
推荐指数
1
解决办法
828
查看次数

JBoss中Jettison和Jackson之间的区别

使用RestEasy JSON Provider Jettison(Badgerfish映射)与杰克逊之间的基本区别是什么?

使用这个的优点和缺点是什么?

json jettison jackson jboss7.x badgerfish

13
推荐指数
1
解决办法
1万
查看次数

Jackson和Jettison在泽西岛使用

Jersey框架使用JacksonJettison库进行JSON解组/编组.AFAIK,Jettison用于将JSON映射到XML(具有不同的机制支持,如映射表示法),而Jackson用于JSON生成/解析(我也使用它而不用Jersey).

Jersey会将这两个用于两个不同的功能,还是两个用于相同的JSON生成/解析功能?

我只想要支持JSON格式.在我的第一次想到,似乎我可以删除任何依赖项,我认为我可以删除Jettison,因为Jacksone似乎是JSON生成/解析的更自然的选择.

java rest jersey jettison jackson

11
推荐指数
1
解决办法
8874
查看次数

SimpleJson:字符串到JSONArray

我得到以下JSON:

[
  {
    "user_id": "someValue"
  }
]
Run Code Online (Sandbox Code Playgroud)

它保存在String中.

我想将它转换为JSONObject失败的(因为构造函数假设一个JSON开始{).由于这似乎不可能,我想将其转换为JSONArray.我怎么能用SimpleJson做到这一点?

java json jettison

9
推荐指数
1
解决办法
1万
查看次数

XML通过Jettison和JAXB将列表包装到JSON数组

我正在使用JAXB以一种形式将带注释的对象编组为XML:

  <channels>
     <channel>Test A</channel>
     <channel>Test B</channel>
  </channels>
Run Code Online (Sandbox Code Playgroud)

我想使用JAXB(ala http://blog.bdoughan.com/2011/04/jaxb-and-json-via-jettison.html)将其编组为JSON,但它会对以下内容进行编组:

  "channels" : {
    "channel" : [ "Test A", "Test B" ]
  },
Run Code Online (Sandbox Code Playgroud)

我真的希望它能够编组成以下形式:

  "channels" : {
    {"Test A"}, {"Test B"}
  },
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?这是正确的做法吗?

xml json jaxb jettison

6
推荐指数
1
解决办法
4367
查看次数

使用RESTeasy和Jettison将对象编组到JSON时忽略空值

当RESTeasy将POJO编组为XML时,默认情况下它将跳过空值:请参阅Jaxb编组始终编写xsi:nil(即使@XmlElement(required = false,nillable = true))

但是,封送至JSON时,将包含null属性。有什么方法可以强制JSON输出与XML输出匹配?

rest json jettison resteasy

5
推荐指数
1
解决办法
2845
查看次数

Spring Batch,JdbcExecutionContextDao java.util.Map $ Entry反序列化器问题,xstream 1.4.1

我在使用Spring Batch 2.1.9时遇到问题:当我使用jobExplorer.getJobExecution(jobExecutionId)时,当DAO必须反序列化一个字符串时,我发现了一个问题:

{"map":[{"entry":{"string":"parsedComparingDate","date":"2014-03-08 23:00:00.0 UTC"}}]}
Run Code Online (Sandbox Code Playgroud)

使用方法从BATCH_JOB_EXECUTION_CONTEXT表中获取JdbcJobExecutionDao.getJobExecution()

我知道spring批处理使用xstream 1.3,但是在我的Pom中,我有:

  • 春季批次2.1.9 ;
  • xstream 1.4.1(从smook继承);
  • 抛弃1.3.3(继承自cxf);

此外,我读到xstream 1.3不能与jettison 1.3.3一起正常工作,但是使用xstream 1.3(不包括pom的xstream 1.4.1)可以正常工作,而使用xstream 1.4.1或主要版本时,我发现以下异常:

Caused by: java.lang.InstantiationError: java.util.Map$Entry
        at sun.reflect.GeneratedSerializationConstructorAccessor1.newInstance(Unknown Source) [:1.6.0_23]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513) [rt.jar:1.6.0_23]
        at com.thoughtworks.xstream.converters.reflection.Sun14ReflectionProvider.newInstance(Sun14ReflectionProvider.java:75) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.instantiateNewInstance(AbstractReflectionConverter.java:424) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:229) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:71) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.converters.collections.MapConverter.putCurrentEntryIntoMap(MapConverter.java:85) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.converters.collections.MapConverter.populateMap(MapConverter.java:77) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.converters.collections.MapConverter.populateMap(MapConverter.java:71) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.converters.collections.MapConverter.unmarshal(MapConverter.java:66) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) [xstream-1.4.1.jar:]
        at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65) …
Run Code Online (Sandbox Code Playgroud)

java maven-2 xstream jettison spring-batch

5
推荐指数
1
解决办法
3790
查看次数

编组时,Jettison/String以整数形式返回

有一个Jettison的"功能",在2008年的JIRA入门中概述,其中涉及以下问题:

假设我要求"元素"的值为"00102"; 输出可能如下所示:

{ "Response": 
    { "element": "00102" }
}
Run Code Online (Sandbox Code Playgroud)

但现在我将"element"设置为"102":

{ "Response":
    { "element": 102 }
}
Run Code Online (Sandbox Code Playgroud)

我理解Jettison正试图提供帮助......但是说真的,我不需要它代表我来决定这种事情.不,谢谢.

目前的解决方案

目前,我已经使用了用户在此处概述的解决方案,他将以下内容添加到bean配置中:

<bean id="simpleConverter" class="org.codehaus.jettison.mapped.SimpleConverter"/>

<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider">
    <property name="typeConverter" ref="simpleConverter"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

这部分地解决了这个问题,即使所有元素都被强制为字符串,即使它们是明显的整数.现在,至少,我确切地知道我的数据将保持什么结构,并且元素类型不会在不知情的情况下从字符串变为整数然后再返回.

问题

但是,我现在无法输出另一个元素作为整数,即使我现在希望这样做.似乎我只能强制元素的输出在整个服务中强制字符串,而不是基于每个元素.

除了'使用杰克逊'的建议(我不能遵循,因为框架显式使用Jettison)有没有其他方法我可以指定哪些元素我想强制作为我的JSON输出中的字符串?

java json jettison

5
推荐指数
1
解决办法
650
查看次数

Java Jersey Jettison Message Body Reader异常

我是REST服务的完全初学者,但我需要通过REST从网站访问一些信息.该服务有一些示例代码,以显示如何登录我使用过.示例代码使用Jettison作为JSON解析器,但是当我尝试运行以下代码片段时,我得到一个例外:

JSONObject post = baseResource.path("login")
            .queryParam("service", "ABC").queryParam("auth", authParam)
            .accept(MediaType.APPLICATION_JSON_TYPE).post(JSONObject.class);
Run Code Online (Sandbox Code Playgroud)

baseResourse是一个WebResource对象.代码失败,出现以下异常:

Exception in thread "main" com.sun.jersey.api.client.ClientHandlerException:
A message body reader for Java class org.codehaus.jettison.json.JSONObject, and
Java type class org.codehaus.jettison.json.JSONObject, and MIME media type
application/json; character=utf-8 was not found
Run Code Online (Sandbox Code Playgroud)

示例代码并不表示我应该添加任何"消息正文阅读器"来处理响应?或者我是否需要添加或执行任何明显的解析响应?谢谢.

java rest jersey jettison

4
推荐指数
1
解决办法
9108
查看次数

使用Jettison进行JSON解析

我试图使用Jettison解析JSON对象.这是我正在使用的代码

String s ="{\"appUsage\":[{\"appName\":\"ANDROID\",\"totalUsers\":\"0\"},{\"appName\":\"IOS\",\"totalUsers\":\"4\"}]}";

JSONObject obj = new JSONObject(s);

ArrayList<MiAppUsage> l1 =  (ArrayList<MiAppUsage>) jsonParser(ArrayList.class, obj);

public static Object jsonParser(Class c, JSONObject obj)
            throws JSONException, XMLStreamException, JAXBException {
        JAXBContext jc = JAXBContext.newInstance(c);
        Configuration config = new Configuration();
        MappedNamespaceConvention con = new MappedNamespaceConvention(config);
        XMLStreamReader xmlStreamReader = new MappedXMLStreamReader(obj, con);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        ArrayList<MiAppUsage>customer = (ArrayList<MiAppUsage>) unmarshaller.unmarshal(xmlStreamReader);
        return customer;
    }
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误

线程"main"中的异常javax.xml.bind.UnmarshalException - 带有链接异常:[javax.xml.bind.UnmarshalException:unexpected element(uri:"",local:"appUsage").com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl上的com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(未知来源)中的预期元素为(none)]. un comrshal0(未知来源)com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(未知来源)com.json.UnmarshalDemo.jsonParser(UnmarshalDemo.java:56)com.json.UnmarshalDemo .main(UnmarshalDemo.java:33)引起:javax.xml.bind.UnmarshalException:意外元素(uri:"",local:"appUsage").com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError中的com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(未知来源)中的预期元素为(无). (未知来源)com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(未知来源)com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(未知)来自com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext $ defaultRootLoader.childElement(未知来源)com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(未知)来自com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(未知来源)的com.sun.xml.internal.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(未知来源)在com.sun.xml.internal.bind.v2.runtime.unmarshall的com.sun.xml.internal.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleStartElement(未知来源)er.StAXStreamConnector.bridge(未知来源)... 4更多引起:javax.xml.bind.UnmarshalException:意外元素(uri:"",local:"appUsage").预期的要素是(无)......还有14个

如何解决这个问题

java json jettison

4
推荐指数
1
解决办法
1万
查看次数

JACKSON 支持 Java 泛型吗?

目前,我正在研究一个基于架构的 restFul 项目。因此,我们使用 JAXB 进行 XSD-->JAVA 转换。我有一个类如下:

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
     "systemResponse"
    })
    @XmlRootElement(name = "RestResponse")

public class RestResponse implements Serializable {

     private final static long serialVersionUID = 1L;
     @XmlElementRef(name = "SystemResponse", namespace = "http://www.intuit.com/psd/cdm/v1", type = JAXBElement.class)
   protected JAXBElement<? extends CdmComplexBase> systemResponse;

...
}
Run Code Online (Sandbox Code Playgroud)

这是它的序列化方式:

{"systemResponse":{"name":"{http://www.intuit.com/psd/cdm/v1}Transactions","declaredType":"com.intuit.psd.cdm.v1.Transactions","scope":"javax.xml.bind.JAXBElement$GlobalScope","value":{"requestId":null,"requestName":null,"isEncrypted":null,"totalCount":null,"pageSize":null,"genDuration":null,"genDateTime":null,"transaction":[{"id":null,"externalKey":[],"metaData":null,"accountNumber":"12345678798","transactionNumber":null,"transactionReference":null,"batchID":null,"batchCycleDate":null,"paymentType":null,"paymentMethod":null,"transactionType":null,"cardType":null,"amount":null,"transactionDate":null,"authCode":null,"customerTransactionID":null,"ccnumberFirstSix":null,"ccnumberLastFour":null,"etctype":null,"posentryType":null}]},"nil":false,"globalScope":true,"typeSubstituted":false}}
Run Code Online (Sandbox Code Playgroud)

尝试反序列化时,出现以下异常:

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class javax.xml.bind.JAXBElement<com.intuit.psd.cdm.v1.CdmComplexBase>]: can not instantiate from JSON object (need to add/enable type information?)
 at [Source: java.io.StringReader@725d9aa7; …
Run Code Online (Sandbox Code Playgroud)

json jettison jackson

4
推荐指数
1
解决办法
3368
查看次数

从JSONArray中删除JSON对象 - Jettison

是否有通过使用索引删除存储在JSONArray中的JSONObject的直接方法.我尝试了所有的可能性.仍然无法从JSON数组中删除JSON对象.任何提示都会有所帮助谢谢

java json jettison

4
推荐指数
1
解决办法
2万
查看次数

从json解组嵌套对象

我有传入的JSON字符串,我需要解组到JAXB注释对象.我正在使用jettison这样做.JSON字符串如下所示:

{ 
  objectA : 
  { 
    "propertyOne" : "some val", 
    "propertyTwo" : "some other val",
    objectB : 
    {
      "propertyA" : "some val",
      "propertyB" : "true" 
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

ObjectA代码如下所示:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "objectA")
public class ObjectA {
    @XmlElement(required = true)
    protected String propertyOne;
    @XmlElement(required = true)
    protected String propertyTwo;
    @XmlElement(required = true)
    protected ObjectB objectB;
}
Run Code Online (Sandbox Code Playgroud)

ObjectB类代码如下所示:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "objectB")
public class ObjectB {
    @XmlElement(required = true)
    protected String propertyA;
    @XmlElement(required = true)
    protected boolean propertyB;
}
Run Code Online (Sandbox Code Playgroud)

用于解组的代码:

JAXBContext …
Run Code Online (Sandbox Code Playgroud)

json jaxb jettison

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

jettison ×13

json ×9

java ×7

jackson ×3

rest ×3

jaxb ×2

jersey ×2

xml ×2

arrays ×1

badgerfish ×1

jboss7.x ×1

maven-2 ×1

resteasy ×1

spring-batch ×1

xstream ×1