是否有相当于JAXB的PHP?事实证明,这对于Java开发非常有用,作为一个新的PHP,我想使用JAXB在PHP世界中提供的相同概念. 解决方案 我也试图在以前找到同一件事,但不能.因此,我决定为PHP 5.3编写自己的库,该图书馆反映了Jaxb的注释将对象绑定到XML. 在这里查看: https://github.com/lampjunkie/xmml-hitch 希望其他人会发现这有用. 其他解决方案 我写了一个简单的,基于注释PAXB: https://github.com/github.com/ziollek/paxb .检查该解决方案是否足够. 带有XML绑定注释的样本类 /** * @XmlElement(name="root") */ class SampleEntity { /** * @XmlElement(name="attribute-value", type="AttributeValueEntity
以下是关于 jaxb 的编程技术问答
下面的代码用于JDK 1.7使用的JAXB实现,但现在在JDK 1.8下它破裂了.在下面的代码中,您会发现关键更改似乎使其在1.8中起作用. 1.8以下的"修复"并不是真正的修复,因为揭露内部收集以进行外界的直接修改是不好的做法.我想通过我的班级控制对内部列表的访问,我不想通过制作可观察的收藏和聆听来使事情复杂化.这是不可接受的. 有什么方法可以使我的原始代码在JD 1.8的JAXB下工作? @XmlElementWrapper(name = "Wrap") @XmlElement(name = "Item", required = true) public synchronized void setList(List values) { list.clear(); list.addAll(values); } public synchronized List getList()
我有一个8兆文件.使用JAXB进行编组需要1082毫秒,使用DOM需要862ms,使用SAX需要438ms.这是使用JDK 1.6的所有默认值,没有使用诸如Woodstox之类的额外配置. 为了从JAXB获得更好的表现,我尝试通过做萨克斯来解析... FileReader fr = new FileReader("myfile.xml"); JAXBContext jc = JAXBContext.newInstance(MyObjectList.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); XMLInputFactory xmlif = XMLInputFactory.newInstance(); XMLEventReader xmler = xmlif.createXMLEventReader(fr); long beginTime = System.currentTimeMillis();
我一直在使用DOM来解析我的小XML文档. rel =" noreferrer"> http://www.oracle.com/technetwork/articles/javase/javase/index-140168.html ),我打算使用DOM的JAXB. 请让我知道这是否是正确的方法. 解决方案 JAXB与DOM和SAX不直接相当. Java DOM和SAX解析API是分析XML文档的较低级别的API,而JAXB(用于XML绑定的Java API)是用于将XML元素和归因于Java对象hierearchy(以及VICE)转换为Java对象的高级API. JAXB的实现很可能会在场景后面使用DOM或SAX解析器来进行XML输入数据的实际解析. 通常,您需要将XML文档的内容转换为Java程序中的对象.如果这是您想做的,那么JAXB可能会更容易使用,并且您需要比使用DOM或SAX解析API更少的代码. 这是否是适合您案件的正确方法取决于您项目的功能和技术要求
有什么方法可以加快使用较大(> 1000)类的Javax.xml.bind.jaxbcontext的初始化?在我们的XML重型应用程序中,启动时间约为10分钟,主要由JaxbContexts的初始化时间组成. : - ( 我们在JDK 1.5和org.jvnet.jaxb2.maven2.maven-jaxb2-plugin中使用Sun的Jaxb实现. 澄清:问题并不是我们有许多具有相同上下文路径的JaxBcontext的实例,但问题是一个单个JaxbContext的初始化需要数十秒钟,因为它必须加载和处理数千个类. (我们的XSD相当大且复杂.)所有JAXBContext实例都有不同的上下文路径 - 我们无法进一步减少数字. 解决方案 JAXB参考实现完全有一个有符合条件的系统属性,因此: -Dcom.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.fastBoot=true 或针对包装之前的旧版本:
我正在使用 partial-unmarshalling jaxb 的示例,但是我无法删除不在根级上的xml元素(因为他们不' t具有@xmlrootelement标签).在我的示例中,我试图读取Shipto-element而不是pashiordorder-element. 通常,我会使用jaxbelement umarshal(源源,class declaredType),但是由于该示例是使用unmarshallerhandler和xmlfilterimpl,所以我不知道在哪里告诉jaxb它应该使用哪个类. 我的错误消息是:引起:javax.xml.bind.unmarshalexception:意外元素(uri:"",local:" shipto").预期元素是,, 我四处搜索,但还没有发现任何有用的东西. 这是jaxb-webpage中的示例代码: main.java public class Main { public static void m
我正在使用jaxb将字符串XML数据转换为POJO,如下所示. JAXBContext jaxbContext = JAXBContext.newInstance(Employee.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); StringReader reader = new StringReader(temp); Employee emp = (Employee) unmarshaller.unmarshal(reader); 它很好,但是它总是试图在摘要期间验证每个元素的文本,有时会失败.我不想要,因为在文本中有很多HTML标签,有时它们也很错误. 所以,我希望Jaxb跳过整个文本并将其传递,以形成POJO数据.有什么方法可以实现这一目标.任何帮助将不胜感激. 解决方案 这是一个示例,您需要使用@xmlanyelement来获取内容,而不使用CDATA. 雇
我有这样的架构层次结构: common |---legacy | |---legacy.xsd xmlns="http://common/legacy" | |---other.xsd xmlns="http://common/legacy" | '---....xsd xmlns="http://common/legacy" |---send |---file.xsd xmlns="http://common/send" '---text.xsd xmlns="http://common/send" '---....xsd xmlns="http://common/send" 一个文件夹中的所有文件都有相同的名称空间. 现在,我想将名称空间映射到特定的Java软件包(我无法更改名称空间). 我找到了将架构绑定到软件包的解决方案.但是后来
我想将" javax.xml.datatype.xmlgregoriancalendar"更改为" java.util.date". ,但我没有在Java类中放任何@xmljavatypeadapter的注释. 所以,我将尝试使用@xmljavatypeadapters的注释,但我不知道如何使用它... 请告诉我使用它的示例. 解决方案 作为一个有趣的范围,您实际上不需要适应XMLGregorianCalendar,因为Jaxb支持Java.util.date. @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement public class Example { @XmlSchemaType(name = "date") public Date publishingDate; } 如果需要,@xmljavatypeadapter可以这样工作,假设您的自定义类: public class
我们正在开发10多年以来开发的业务应用程序(100万+ LOC).切换到JDK8时,我们会发现JDK8的Metaspace问题.这似乎与com.sun.sun.xml.ws:Webservices-rt:1.4(Metro 1.4)中引用的JAXB-version有关.由于通过JAXB的应用程序/实例创建应用程序和遗产的紧密链接,因此可以轻松地驾驶旧库. 目前,我们正在研究这个问题.我们创建了一个重现此行为的示例程序: import java.io.ByteArrayInputStream; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRoo
我正在使用Jersey在OSGI捆绑包中部署一些REST服务.这些服务像 一样注明 @POST @Path("/adduser") @Consumes(MediaType.APPLICATION_XML+","+MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_XML) public Message addUser(User user) { ... } 我遇到的第一个问题是,该服务不接受我在@consumes符号中放入的两种哑剧类型,而只是第一个. 第二个也是最糟糕的是,当我尝试致电服务时,会收到以下执行.我可以@consumes text/plain,例如我可以@produce application/xml,但是如果我尝试@consumes @consumes application/json或application/xml服务器抛出异常. 当我使用REST客户端或AJAX调用良好的JSON或
我正在运行一个非常简单的OSGI捆绑包,其激活剂看起来像 public void start(BundleContext bundleContext) throws Exception { JAXBContext con = JAXBContext.newInstance(Activator.class); } 这总是抛出异常 org.osgi.framework.BundleException: Exception in com.test.bundle.Activator.start() of bundle com.test.bundle. at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734) at org.eclipse.osgi.framework.internal.core.BundleConte
我有两个Java模块,A和B.A提供了一个核心模型,其中包含JAXB注释和助手类,用于创建DO DO DO DO DO DO DO DO DO DO DOWER(创建上下文,编组,Unmarshalling等)B提供了其他类别通过@xmlanyelement(lax = true)的模型,因此必须添加到JAXB上下文中. 这在普通Java -B的classloader中效果很好,可以看到所有相关类,并可以通过以下方式实例化JAXB上下文. JAXBContext.newInstance(RootFromA.class, RootFromB.class) 现在,我正在尝试使用OSGI(B是Eclipse插件,A是核心库,也将由普通Java命令行模块C使用.经过大量的反复试验,我设法获得了A和B,可以通过OSGI软件包导入查看JAXB API和实现.问题在于,以上称为newinstance似乎使用了JAXB API的classloader,而不是rootfroma之一,当然不
我需要为每个客户部署相同的Web服务.此@javax.jws.WebService将Object用作方法参数和返回类型(在WSDL中以产生). Web服务的每个实例都与Class Path上的客户JAR一起部署.该罐子具有已知的结构,并包含客户服务通过我的服务处理的JAXB注销类. 问题是,当客户将其类的实例作为方法agrument通过时,服务器端JAXB上下文将其删除了一些奇怪的Xerces dom Node,因为(我理解)在部署时间仅在部署时间@WebMethod和对注释进行了扫描,据已经说过,仅处理Object. 简单地说,我需要在WEB-INF/lib/customer_classes_14586.jar上引起JAXB,这意味着在Jax-WS部署期间对JAXBContext创建进行一些控制. 根本可以吗? 服务器特定的解决方案很好(带有地铁WS堆栈的Glassfish 3.1) 更新 我错过了可能很重要的一件事:我通过
就在包含索引的包中.不过,当我打电话 时 JAXBContext jc = JAXBContext.newInstance("my.package.name"); 我得到了一个jaxbexception,说 " my.package.name"不包含objectfactory.class或jaxb.index 尽管它确实包含两者. 什么有效,但我想要的不是我想要的 JAXBContext jc = JAXBContext.newInstance(my.package.name.SomeClass.class); 来自其他人的这个问题出现在相当多的邮件列表和论坛上,但似乎没有得到答案. 我正在OpenJDK 6上运行此操作,因此我得到了源包,然后将调试器登上了库.它首先要寻找jaxb.properties,然后查找系统属性,并且未能找到,它尝试使用com.sun.internal.xml.bind.v2.contextfactory创建默认上下