标签: moxy

无法让EclipseLink MOXy工作

我是JAXB的新手,我想使用EclipseLink MOXy更改默认的名称空间前缀.我的package-info.java包含以下代码行:

@javax.xml.bind.annotation.XmlSchema (
namespace="http://namespace.mysite.com/",
xmlns = { 
    @javax.xml.bind.annotation.XmlNs(prefix="myns", 
               namespaceURI="http://namespace.mysite.com/")
},
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED
)
package com.core.mymodel;
Run Code Online (Sandbox Code Playgroud)

我的jaxb.properties文件包含以下行:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
Run Code Online (Sandbox Code Playgroud)

我已将eclipselink.jar添加到CLASSPATH,package-info.java和jaxb.properties文件与我的模型类位于同一个包中,但是,当我运行该程序时,我收到以下错误消息:

javax.xml.bind.JAXBException: Provider org.eclipse.persistence.jaxb.JAXBContextFactory        not found
- with linked exception:
[java.lang.ClassNotFoundException: org.eclipse.persistence.jaxb.JAXBContextFactory]
at javax.xml.bind.ContextFinder.newInstance(Unknown Source)
at javax.xml.bind.ContextFinder.find(Unknown Source)
at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用EclipseLink版本2.3.0和2.0.2并仍然得到相同的错误消息.有谁碰巧知道可能是什么问题?

提前谢谢了

xml jaxb eclipselink moxy

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

当数据包含不可显示的字符时,JAXB输出无效的XML

我正在使用JAXB 2.2.5从JAXB模型输出Xml,数据从数据库中填充,有时数据库包含不可显示的字符,它不应该像

0x1a 
Run Code Online (Sandbox Code Playgroud)

如果确实如此,那么JAXB通过输出这个char来输出无效的Xml,它不应该逃脱它或者其他东西吗?

更新

我想知道是否有任何实现可以解决这个问题,也许Eclipselink MOXy呢?

编辑

我尝试了解决非法char问题的解决方法,但它以不合需要的方式更改输出.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><metadata created="2013-02-27T11:40:04.009Z" xmlns="http://musicbrainz.org/ns/mmd-2.0#" xmlns:ext="http://musicbrainz.org/ns/ext#-2.0"><cdstub-list count="1" offset="0"><cdstub id="w237dKURKperVfmckD5b_xo8BO8-" ext:score="100"><title>fred</title><artist></artist><track-list count="5"/></cdstub></cdstub-list></metadata>
Run Code Online (Sandbox Code Playgroud)

<?xml version="1.0" ?><metadata xmlns:ext="http://musicbrainz.org/ns/ext#-2.0" xmlns="http://musicbrainz.org/ns/mmd-2.0#" created="2013-02-27T11:39:15.394Z"><cdstub-list count="1" offset="0"><cdstub id="w237dKURKperVfmckD5b_xo8BO8-" ext:score="100"><title>fred</title><artist></artist><track-list count="5"></track-list></cdstub></cdstub-list></metadata>
Run Code Online (Sandbox Code Playgroud)

<track-list count="5"/>已经成为<track-list count="5"></track-list>这是不可取的,我不知道为什么它是这样做的.

java xml jaxb eclipselink moxy

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

没有无限循环的JAX WS服务上的Jpa实体

如何通过JAX WS Web服务发送JPA生成的实体,而不会因为这些实体中的引用循环而获得XML无限循环异常?

任何的想法?我发现这个MOXy可以做到......部分.但是我已经生成了实体,并且手动将XmlTransient和这样的注释添加到每个实体中都很疯狂.

你还有其他想法怎么做吗?

谢谢!

web-services jpa jaxb eclipselink moxy

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

moxy jaxb中的XmlAdapter和XmlIDREF

我正在尝试使用MOXy JAXB来序列化类A,它看起来像:

@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement
public class A {
    private Map<Foo, Bar> fooBar = new HashMap<Foo, Bar>();
    private Set<Foo> foos = new HashSet<Foo>();

    @XmlJavaTypeAdapter(FooBarMapAdapter.class)
    public Map<Foo, Bar> getFooBar() {
        return fooBar;
    }

    public void setFooBar(Map<Foo, Bar> fooBar) {
        this.fooBar = fooBar;
    }

    @XmlElement
    public Set<Foo> getFoos() {
        return foos;
    }

    public void setFoos(Set<Foo> foos) {
        this.foos = foos;
    }
}
Run Code Online (Sandbox Code Playgroud)

关键是"foos"字段中的Foo对象是fooBar映射中的Foo对象的超集.因此,我想将"fooBar"映射的关键元素"链接"到"foos"列表中的相应元素.我使用XmlID和XmlIDREF注释尝试了这个:

@XmlAccessorType(XmlAccessType.NONE)
public class Foo {
    private String xmlId;

    @XmlID
    @XmlAttribute
    public String getXmlId() {
        return xmlId;
    }

    public void setXmlId(String …
Run Code Online (Sandbox Code Playgroud)

java xml jaxb adapter moxy

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

如何将JSON请求发布到Jersey REST服务?

我可以成功地将XML数据发布到我的服务中,但是,尝试使用JSON执行相同操作失败了.POJO是:

@XmlRootElement
public class Address {
    String city;
    String zip;
    //Getters & setters...
}
Run Code Online (Sandbox Code Playgroud)

服务资源是:

@POST
@Produces("application/json")
public Address fix(Address a) {
    return a;
}
Run Code Online (Sandbox Code Playgroud)

我按照以下方式进行POST:

POST /AcmeWeb/svc/simple HTTP/1.1
Content-Length: 30
Content-Type: application/json; charset=UTF-8

{"city":"Miami","zip":"33130"}
Run Code Online (Sandbox Code Playgroud)

服务器正在响应400 Bad Request.我搜索了互联网,但没有找到发布JSON的好例子.任何帮助表示赞赏.谢谢.

jax-rs jersey eclipselink moxy

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

生成json时可以让MOXy将字符串转换为布尔值吗

对象模型的元素结尾为String类型

public class LifeSpan {

protected String begin;
protected String end;
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String ended;
....
Run Code Online (Sandbox Code Playgroud)

但实际上它只是一个布尔值,(我不知道XmlJavaTypeAdapter批注的意义)

当输出为XML时

<life-span><begin>1999-04</begin><ended>true</ended></life-span>
Run Code Online (Sandbox Code Playgroud)

所以定义为布尔值还是字符串都没有关系

但是JSON输出是

"life-span" : {
         "begin" : "1999-04",
         "ended" : "true"
      },
Run Code Online (Sandbox Code Playgroud)

当我需要它时

 "life-span" : {
         "begin" : "1999-04",
         "ended" : true
      },
Run Code Online (Sandbox Code Playgroud)

我无法真正更改对象模型,因此以为我可以映射到oxml.xml文件中的正确类型,并尝试了

<java-type name="LifeSpan">
            <java-attributes>
                <xml-element java-attribute="ended"  type="boolean"/>
            </java-attributes>
        </java-type>
Run Code Online (Sandbox Code Playgroud)

但它不是那样。

java json jaxb eclipselink moxy

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

JAXBContext,jaxb.properties和moxy

jaxb.properties需求是在同一个封装领域类,你是在创建JAXBContext中.

我正在使用Moxy的xml驱动配置,因为我不想使用注释或XJC生成的对象.我有一个分布在多个包中的现有域类.这是否意味着我需要jaxb.properties在所有这些包中拥有现在或者有更好的替代方案(也许编写我自己的一些可以从jvm arg或其他东西读取的接口的实现)?

jaxb eclipselink moxy

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

使用GlassFish v4自定义JSON marhsalling

我们有一个在Apache TomEE上运行的JAX-RS应用程序.我们稍微定制默认的Jettison提供程序,以更好地遵守JavaScript前端使用的JSON约定.TomEE允许通过其resources.xml文件执行此操作:

<resources>
    <Service id="jettison" class-name="org.apache.cxf.jaxrs.provider.json.JSONProvider">
        serializeAsArray = true
        dropRootElement = false
        arrayKeys = members,roles
        supportUnwrapped = true
        writeXsiType = false
    </Service>
</resources>
Run Code Online (Sandbox Code Playgroud)

现在我们正在迁移到GlassFish v4.1,我们注意到JSON输出与我们在TomEE中的输出不同 - 因此完全打破了前端.我正在寻找类似的机制来自定义GlassFish中的JSON编组器.事实上,我已经有点坚持与新泽西州,莫西,杰克逊,抛弃.我们如何知道实际使用哪个JSON提供程序?我们如何选择一个?我们如何定制行为?

该应用程序是纯JAX-RS,不直接使用任何JSON处理器,而是依赖于JAXB注释类的编组.引入任何非JavaEE依赖项是非常不受欢迎的,因为该应用程序旨在跨容器移植(TomEE,GlassFish,某天WildFly).配置文件方法,类似于TomEE,是优选的; 程序化方式也是可以接受的 - 但只有在保持可移植性的情况下.

glassfish jax-rs jersey jackson moxy

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

在由Java JAXB注释类生成的模式中生成XSD限制

MOXy BeanValidation使我能够为我的JAXB类添加验证.

使用MOXy的"Bean Validation Plugin"我可以根据来自现有 Schema的限制/方面在生成的JAXB类中进行Bean Validation .

但是有没有办法根据来自JAXB注释的java类的 Bean Validation注释生成带有限制/方面的模式

XJC在执行'schema first'生成java时有一个方便的插件架构,但有没有任何等效的'java first'方法来增强生成的XSD带有额外的限制,甚至添加XML注释?在MOXy或JAXB-RI中?

MOXy非常灵活,可以在中间映射中使用,可以在模式生成期间使用吗?

JAXB刻面的项目似乎做我想要什么,但实施者不得不叉一个全新JAXB-RI在得到它,它似乎不会很快通过的任何时间.(见这个Java JIRA)


我尝试了@ m0mus指定的分辨率,但必须使用sonatype存储库中的2.7.0-SNAPSHOT版本.我还有几个问题; 1.我必须用@XmlElement注释java字段以使facet出现在xsd中.@XmlAttribute,@ XmlAccessorType(XmlAccessType.FIELD)没有任何区别.@Pattern没有用; 我不得不在Pattern.List中使用单个Pattern.

@XmlElement
@Pattern.List(value = { @Pattern(regexp="[0-9]*") })
public String phoneNumber2;
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅EclipseLink论坛

java xsd jaxb moxy

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

解组元素映射到属性时找不到描述符

我有一个REST客户端和服务器(Jersey)通过JSON消息进行通信.在将Jackson从切换到MOXy后,我开始接受XMLMarshalException: No descriptor found while unmarshalling element mapped to attribute someAttribute.

该元素在JSON中查找如下: "someAttribute": [{ "type": "string", "value": "a string" }]
相应的Java元素List<Object> someAttribute;使用标准的getter和setter方法.

但是,如果我在客户端(发送数据)使用Jackson,则会发送不带类型的相同数据并通过MOXy正确反序列化:

"someAttribute": ["a string"]

为什么MOXy无法处理自己的JSON,我该如何解决这个问题呢?

MOXy 2.6.0

javax.ws.rs.WebApplicationException: HTTP 400 Bad Request
    at org.eclipse.persistence.jaxb.rs.MOXyJsonProvider.readFrom(MOXyJsonProvider.java:708)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:256)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:235)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:155)
    at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundReadFrom(MappableExceptionWrapperInterceptor.java:74)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:155)
    at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1085)
    at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:874)
    at org.glassfish.jersey.server.ContainerRequest.readEntity(ContainerRequest.java:271)
    at org.glassfish.jersey.server.internal.inject.EntityParamValueFactoryProvider$EntityValueFactory.provide(EntityParamValueFactoryProvider.java:96)
    at org.glassfish.jersey.server.spi.internal.ParamValueFactoryWithSource.provide(ParamValueFactoryWithSource.java:71)
    at org.glassfish.jersey.server.spi.internal.ParameterValueHelper.getParameterValues(ParameterValueHelper.java:94)
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$AbstractMethodParamInvoker.getParamValues(JavaResourceMethodDispatcherProvider.java:127)
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102)
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) …
Run Code Online (Sandbox Code Playgroud)

java json jaxb unmarshalling moxy

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

标签 统计

moxy ×10

jaxb ×8

eclipselink ×6

java ×5

xml ×3

jax-rs ×2

jersey ×2

json ×2

adapter ×1

glassfish ×1

jackson ×1

jpa ×1

unmarshalling ×1

web-services ×1

xsd ×1