标签: moxy

NPE在JAX-RS中抛出编组实体

我有一个JAX-RS Web服务,它使用JPA实体类.我有一个像这样的资源类:

@Path("/entity")
public class MyEntityResource
{
    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("/{entity}")
    public MyEntity getMyEntity(@PathParam("entity") String entity)
    {
        log.debug("Entering getMyEntity with param: " + entity);
        MyEntity entityObject = genericService.find(MyEntity.class, entity);

        if (entityObject == null)
        {
            log.debug("Entity not found.");
            throw new WebApplicationException(Response.Status.NOT_FOUND);
        }

        log.debug("Exiting getMyEntity");

        return entityObject;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行该服务并对该实体进行get调用时,我收到此错误:

SEVERE: The response of the WebApplicationException cannot be utilized as the response is already committed. Re-throwing to the HTTP container
javax.ws.rs.WebApplicationException: javax.xml.bind.MarshalException
 - with linked exception:
[Exception [EclipseLink-25003] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): …
Run Code Online (Sandbox Code Playgroud)

jpa jax-rs jaxb eclipselink moxy

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

JAXB:限定属性禁用默认命名空间xmlns =""?

我用的时候 @XmlSchema(attributeFormDefault = XmlNsForm.QUALIFIED, ...)

要么@XmlAttribute(namespace = "sample.com/y", ...)

JAXB无视 @XmlSchema(namespace = "sample.com/x", ...)

而不是:

<a xmlns="sample.com/y" xmlns:ns0="sample.com/y">
  <b ns0:att=""/>
</a>
Run Code Online (Sandbox Code Playgroud)

生成类似的东西:

<ns1:a xmlns:ns1="sample.com/x" xmlns:ns0="sample.com/y">
  <ns1:b ns0:att=""/>
</ns1:a>
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?有没有办法纠正这个?

jaxb jaxb2 moxy

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

日食靛蓝的Jaxb项目

当我在eclipse indigo中创建一个jaxb项目时,它告诉我"当前选择的JAXB库提供程序是无效的",这是eclipselink2.3.0-Indigo我尝试了javanet下载jar但没有成功.我可以尝试这里描述的演示中的示例:http: //wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted,但MOXy自定义部分除外.我跑的时候没有错误,它似乎没有做任何事情.

我错过了什么.提前致谢.卡迈勒

java jaxb eclipselink moxy

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

JAXB包装包装的集合

我有一个包含两个列表的类.我想围绕列表元素和两个列表生成一个包装元素.

class SomeClass {

   private List<TypeA> listA;
   private List<TypeB> listB;

}

<some-class>
    <lists>
        <list-a>
            <element-from-list-a />
            <element-from-list-a />
            <element-from-list-a />
            ...
        </list-a>

        <list-b>
            <element-from-list-b />
            <element-from-list-b />
            <element-from-list-b />
            ...
        </list-b>
    </lists>
</some-class>
Run Code Online (Sandbox Code Playgroud)

我可以使用xml-element-wrapper在列表周围生成一个包装器,但是我不能将这两个列表包装成一个元素.

是否可以在JAXB和/或moxy实现中执行此操作?

java jaxb xml-serialization moxy

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

Eclipselink和@XmlRef的问题

我使用Eclipselink 2.3.2作为我的JAXB(JSR-222)提供程序.我创建了一个通用列表,其中包含一个项目列表和一组分页链接.

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

@XmlRootElement(name = "listdata")
public class ListEntity<T> {

    @XmlElementRef
    public List<T> data;

    @XmlElementRef
    public PaginationLinks links;

    public ListEntity(List<T> data) {
        this.data = data;
    }

    public ListEntity() {
    }

}
Run Code Online (Sandbox Code Playgroud)

我的实际实体

@XmlRootElement(name="authorization")
public class AuthorizationDTO {

    @XmlElement 
    public String referenceNumber;

} 
Run Code Online (Sandbox Code Playgroud)

因此,在创建列表后,当我尝试编组它时,我收到以下错误.适用于List数据的@XmlElement可以正常工作,但显然无法使用,因为它会创建Object表示

Caused by: Exception [EclipseLink-50006] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.JAXBException

Exception Description: Invalid XmlElementRef on property data on class com.ofss.fc.botg.infra.model.ListEntity. Referenced Element not declared.
Run Code Online (Sandbox Code Playgroud)

jaxb eclipselink moxy

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

Moxy,JSON和Jersey 2.0不会反序列化纯String字符串

在我目前的设置中,我使用Jersey 2.0和MOXy,如在球衣文档中所述.我完全依赖"Auto-Discoverable Features",所以我不使用任何额外的配置或JAXB注释.

我的任务是反序列化服务器端的字符串数组.客户端正在发送JSON消息:

["foo","bar"]
Run Code Online (Sandbox Code Playgroud)

在服务器端,以下方法头应该反序列化它:

@POST
@Path("/stringArray")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response stringArray(List<String> stringList) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

问题: stringList的内容为{null,null},因此元素的数量始终是正确的,但字符串设置为null.

使用小包装类也是如此.这里的课程:

public static class Data {
   public List<String> stringList;
}
Run Code Online (Sandbox Code Playgroud)

将methode签名更改为stringArray(数据数据)并将JSON消息更改为:

{"stringList": ["foo","bar"]}
Run Code Online (Sandbox Code Playgroud)

这两种方法有什么区别,我如何才能使普通字符串数组工作?

更新: 所述问题由@Blaise的回答修复.但序列化POJO列表的密切相关的问题仍然无效.信息:

[org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:找不到媒体类型= application/json的MessageBodyWriter,type = class java.util.ArrayList,genericType = class java.util.ArrayList.]

我找到的唯一解决方案是再次使用包含List的小包装类...

json jersey moxy

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

使用JAXB从JSON解组嵌套对象

我正在尝试使用Eclipselink将输入JSON解组为JAXB对象.但是,当我尝试这样做时,我发现嵌套对象最终被设置为null.我可以尝试自己解组嵌套对象,它将一直工作,直到它必须解组另一个嵌套对象,然后再设置为null.

例如,参加这个课程:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "event", propOrder = {
"objectBs"
})
public class ObjectA
implements Serializable
{

    private final static long serialVersionUID = 56347348765454329L;
    @XmlElement(required = true)
    protected ObjectA.ObjectBs objectBs;

    public ObjectA.ObjectBs getObjectBs() {
        return objectBs;
    }

    public void setObjectBs(ObjectA.ObjectBs value) {
        this.objectBs = value;
    }

    public boolean isSetObjectBs() {
        return (this.objectBs!= null);
    }

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "objectB"
    })
    public static class ObjectBs
        implements Serializable
    {

        private final static long serialVersionUID = 56347348765454329L;
        @XmlElement(required = true) …
Run Code Online (Sandbox Code Playgroud)

json jaxb eclipselink moxy

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

Moxy:对象列表XML和JSON不能同时看起来很好

我有一个问题是让Moxy为继承对象列表生成"好"的XML和JSON.XML查找或JSON看起来都很好,但不是同时.这是模型:

public static abstract class Animal {
    private String name;

    protected Animal() {
    }
    protected Animal(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
@XmlRootElement
public static class Tiger extends Animal {
    public Tiger() {
    }
    public Tiger(String name) {
        super(name);
    }
}

@XmlRootElement
public static class Lion extends Animal {
    public Lion() {
    }
    public Lion(String name) {
        super(name);
    }
}

@XmlRootElement
public static …
Run Code Online (Sandbox Code Playgroud)

xml inheritance json jaxb moxy

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

使用MOXy编组列表<Object>

我已经阅读了很多Blaise Doughan的StackOverflow答案和博客文章,我想我理解他使用@XmlAnyElement和Object []的例子.

但是相同的原则似乎不适用于List - 如下面的示例所示(部分从他的一个示例复制,部分从xjc输出复制).

我相信下面的代码应该创建JSON:

{"method":"test","status":["value":"500"]}
Run Code Online (Sandbox Code Playgroud)

但它正在创建JASON:

{"method":"test","value":["com.mdsh.test.JsonRequestTest$Status@64dbfe37"]}
Run Code Online (Sandbox Code Playgroud)

这对我没有多大用处.

任何人都可以指导我正确地编组这个小物件吗?

package com.mdsh.test;

import static org.junit.Assert.assertEquals;

import java.io.StringWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlRootElement;

import org.eclipse.persistence.jaxb.MarshallerProperties;
import org.junit.Test;
import org.jvnet.jaxb2_commons.lang.JAXBToStringStrategy;
import org.jvnet.jaxb2_commons.lang.ToStringStrategy;
import org.jvnet.jaxb2_commons.locator.ObjectLocator;

public class JsonRequestTest
{
    @XmlRootElement
    @XmlAccessorType(XmlAccessType.FIELD)
    public static class Request
    {
        String method;

        @XmlAnyElement(lax = true)
        protected List<Object> any = new Vector<Object>();

        public String getMethod()
        {
            return this.method;
        } …
Run Code Online (Sandbox Code Playgroud)

java json marshalling eclipselink moxy

5
推荐指数
0
解决办法
317
查看次数

是否可以使用Moxy将JSON对象映射到字符串?

假设我有一个数据模型,如:

public class MyModel {
    private String someString;
    private String someJson; // Data structure owned by client, persisted as a CLOB
}
Run Code Online (Sandbox Code Playgroud)

我通过REST API(Jersey)向客户端提供模型.我知道我可以通过以下方式整理/解组:

{
    "someStrong": "foo",
    "someJson": "{ someClientThing: \"bar\", someOtherClientThing: \"baz\"}"
}
Run Code Online (Sandbox Code Playgroud)

但我正在寻找更清洁的东西.有没有办法可以像这样把JSON编组/解组?

{
    someStrong: "foo",
    someJson: {
        someClientThing: "bar",
        someOtherClientThing: "baz"
    }
}
Run Code Online (Sandbox Code Playgroud)

我不希望服务器必须知道数据模型someJson,因为它由客户端拥有.我只是希望服务器处理它的持久性 - 所以服务器会在客户端和数据库之间来回传递它.

注意:它不需要直接映射到字符串 - 只要它可以映射到非结构化的(在服务器上没有静态定义),可以在持久化之前进行字符串化(并且在检索时将其解析为非结构化对象).

java jaxb jersey moxy

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

标签 统计

moxy ×10

jaxb ×8

eclipselink ×5

java ×4

json ×4

jersey ×2

inheritance ×1

jax-rs ×1

jaxb2 ×1

jpa ×1

marshalling ×1

xml ×1

xml-serialization ×1