Tag: moxy

JAXB:在解组时拦截?

我有一个使用JAX-RS和JAXB的典型Web服务,在解组时我想知道JAXB显式调用了哪些setter。 这有效地让我知道调用者提供的文档中包含哪些元素。 我知道我可以使用XmlAdapter解决这个XmlAdapter ,但是我在很多不同的包中都有很多类,我不想为每一个都创建适配器。 我也不想把钩子放进每一个二传手。 如果可能,我想要一个通用的解决方案。 请注意,我的所有类都设置为使用getter和setter; 它们都没有使用访问类型的字段。 我的服务使用Jersey 2.4,Spring 3.2和MOXy 2.5.1,所以如果有任何东西可以从任何一个中得到充分利用,那就更好了。 我们最初的想法是我们可以动态创建一个工厂类(类似于@XmlType支持的),它将返回一个拦截setter的代理对象。 我们认为我们可以使用MOXy中的MetadataSource概念来实现这一点,但这似乎不可能。 有人有主意吗?

推荐的JAX-WS框架,用于处理Moxy

目前我正在使用CXF,但由于CXF中的以下代码: // fall back if we’re using another jaxb implementation try { riContext = JAXBUtils.createRIContext(contextClasses .toArray(new Class[contextClasses.size()]), tns); } CXF加载Moxy和RI JAXB上下文(可能依赖于非标准API)。 在我的情况下,启动时间和内存的开销太高了。 我正在寻找一个良好的开源JAX-WS实现(CXF替换),它将按预期与Moxy一起使用。

用JAXB保持干爽

我正在开发许多必须按以下格式序列化为XML的Java类: 一开始, Foo.java看起来像这样: @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) class Foo { @XmlAttribute String value; // snip constructors // snip methods // getValue // equals, hashCode, toString // static valueOf(String), static valueOf(int) } 猜测Bar.java和Baz.java可能是什么Bar.java并不需要太多想象力。 这些是非常简单的包装类(在本例中为int , String和boolean 。 到目前为止,一切都是笨拙的。 写完第九轮之后 class WhoCares { @XmlAttribute Whatever value; /* 2 constructors */ /* 6 methods found in every one of these […]

JAXB编辑列表getter?

我有XSD文件forms的数据模型,然后使用命令行从xjc生成相应的Java文件。 当我从XSD生成JAXB类时, List类型元素获取为它们生成的getter方法(没有相应的setter方法),如下所示: public List getElement3() { if (element3 == null) { element3 = new ArrayList(); } return this.element3; } 我在从List类型的XSD生成的几乎每个文件中都有很多字段。 使用案例: 现在,我不希望使用null检查生成getter。 我的应用程序代码具有逻辑,其中每个字段的getter经常被调用,这导致它们初始化为空 List 。 然后在编组时我必须停止空列表以传递有效负载,以避免通过线路发送大量空列表。 PS:我有一个用户明确设置Empty List的用例,服务器必须删除后端的某些项目。 因此,区分值是由用户显式设置还是仅因为在访问字段期间调用List的getter而设置。 那么,如何让JAXB生成一个没有null检查的getter? 因为在编译之后编辑生成的java文件会很麻烦,因为它存在于很多文件中,我们有XSD版本需要更新,每次新版本出现时都必须执行编辑。

使用通用的@XmlJavaTypeAdapter解压缩包装在Guava的Optional中

我正在尝试使用通用的XmlJavaTypeAdapter将一些xml解组为包含在Guava的Optional中的java对象。 但是,我无法使用generics来正常工作。 我正在使用eclipselink 2.5.1 / moxy XML: Test Test Page.java: import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.eclipse.persistence.oxm.annotations.XmlPath; import com.google.common.base.Optional; @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement() public class Page { @XmlPath(“label”) private Label label; @XmlJavaTypeAdapter(OptionalLabelAdapter.class) private Optional description = Optional.absent(); } Label.java: import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlValue; @XmlAccessorType(XmlAccessType.FIELD) public class Label { @XmlValue private String text; […]

Jersey 2中的自定义MOXyJsonProvider无法正常工作?

我正在阅读Moxy的答案忽略json中的无效字段,并且方法匹配了我正在尝试做的事情,所以我决定试一试..我创建了一个function来禁用默认的ConfigurableMoxyJsonProvider; @Provider public class JsonFeature implements Feature { @Override public boolean configure(final FeatureContext context) { final String disableMoxy = CommonProperties.MOXY_JSON_FEATURE_DISABLE + ‘.’ + context.getConfiguration().getRuntimeType().name().toLowerCase(); context.property(disableMoxy, true); return true; } } 我创建了一个非常简单的自定义提供商; @Provider @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public class JsonProvider extends MOXyJsonProvider { @Override protected void preWriteTo(Object object, Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders, […]

如何从JAXB编组的XML文件中删除xmlns:xsi和xsi:type

我有一组JAXB生成的类,有些类有setter方法,它接受“Object”作为参数。 例如: @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name=”Car”, propOrder = { “defaultCar” } public class Car { @XmlElement(name = “DefaultCar”) protected Object defaultcar; public void setDefaultCar(Object value) { this.defaultCar = value; } 在我的代码中创建了这些类的实例后,我调用setter方法传递所需的值。 虽然方法的参数是Object,但值很可能是字符串(我无法控制它的定义方式)。 但是,为了保持一致,我将字符串转换为Object,以便它与方法的参数类型匹配。 代码看起来像这样: Object value = “Old Banger”; Method method = aCar.getClass().getMethod(“setDefaultCar”, Object.class); method.invoke(aCar, value); 当我编写Java对象时,我在结果XML中得到以下内容,就在字符串的值前面: xmlns:xsi =“http://www.w3.org/2001/XMLSchema-instance”xsi:type =“xs:string” 我已经读过某个地方关于方法的参数类型和传递给它的内容之间的数据类型不匹配的地方。 在我的情况下,方法参数是“对象”,但我传入一个字符串给它(虽然我把它转换为对象)。 我也看过这篇文章,看起来和我的问题类似: JAXB在生成的xml中使用“xsi:type”和“xmlns:xsi” 但是,它并没有帮助我克服我的问题。 有没有办法删除这些对xmlns的引用:xsi和xsi:type? 谢谢

JAXB忽略xml标记属性

我用JAXB读取xml文件。 我有以下结构 我有以下型号 @XmlRootElement class A{ @XmlElement(name = “B”, required = true) @XmlPath(“B/@value”) String b; } 我在b实例变量中读取了B标签值属性。 但是在结构 #B 之后的B标签中的一些XML文件中,当JAXB解组文件时,我变得exception,格式不正确。 javax.xml.stream.XMLStreamException:[row,col]处的ParseError:[19,4]

使用key / keyref身份约束将XML模式编译为Java

假设我有以下XML模式: 请原谅人为的例子。 如您所见,它是表格数据。 我定义了一些国家,然后我定义了一些类型的产品。 然后我将单个产品定义为来自一个国家的类型,例如来自法国的奶酪。 这里需要注意的重要一点是,我使用key和keyref将所有产品交叉引用回原始国家/类型。 所以,我的问题是: 是否可以将此模式编译为可以使用Eclipse Moxy解组并且交叉引用完整的java类? 我知道JAXB 2.0规范不支持key / keyref 。 我也知道Moxy会 。 1 此外,我知道Moxy没有Maven插件,并且在任何情况下,都使用XJC生成的类,只需添加一个jaxb.properties文件来指定要使用的JAXB提供程序。 2 所以我怀疑我的问题的答案是“不,你必须亲自制作课程”,但我想在放弃希望之前我会检查。 为了澄清,我的product元素目前正在编译(使用maven-jaxb2-plugin ) @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = “product”) public class Product implements Cloneable, CopyTo, Equals, HashCode, ToString { @XmlAttribute(name = “country”, required = true) protected String country; @XmlAttribute(name = “type”, required = true) protected String type; //getters […]

将MOXy的元数据与实现java.util.Map的类一起使用时的NPE

情况 我正在使用EclipseLink的MOXy,我正在尝试将外部OX映射XML与实现Map接口的类一起使用。 但是,每次我尝试创建一个JAXBContext时,我都会得到以下NPE: Caused by: javax.xml.bind.JAXBException – with linked exception: [java.lang.NullPointerException] at org.eclipse.persistence.jaxb.JAXBContext$TypeMappingInfoInput.createContextState(JAXBContext.java:832) at org.eclipse.persistence.jaxb.JAXBContext.(JAXBContext.java:143) at org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:142) at org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:129) at org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:93) at org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:83) at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:210) at javax.xml.bind.ContextFinder.find(ContextFinder.java:336) at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574) at com.example.MOXyOXTest(MOXyOXTest.java:59) Caused by: java.lang.NullPointerException at org.eclipse.persistence.jaxb.compiler.XMLProcessor.processXML(XMLProcessor.java:202) at org.eclipse.persistence.jaxb.compiler.Generator.(Generator.java:145) at org.eclipse.persistence.jaxb.JAXBContext$TypeMappingInfoInput.createContextState(JAXBContext.java:829) 细节 如果要映射的类实现java.util.Map接口,则只会出现此问题。 如果我映射的类没有实现该接口,那么一切正常。 这是我试图映射的类的简化示例: package com.example; import java.util.Map; // This class just wraps a java.util.HashMap […]