标签: jaxb

com.sun.tools.xjc.reader.Ring.get(Ring.java:113)

我是 Maven 新手,我创建了一个 Maven 项目,其中只有模式。我的目的是将我的所有 XSD 保留在这个项目中,编译并创建 JAXB 生成的类的 jar。下面是我的POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.ads</groupId>
  <artifactId>adsSchema</artifactId>
   <packaging>jar</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>adsSchema</name>
    <pluginRepositories>  
    <pluginRepository>  
        <id>maven2-repository.dev.java.net</id>  
        <name>Java.net Repository for Maven</name>  
        <url>http://download.java.net/maven/2/</url>  
        <layout>default</layout>  
    </pluginRepository>  
    </pluginRepositories>
     <build>  
         <plugins>  
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
            <plugin>  
                <!-- jaxb plugin -->  
                <groupId>org.jvnet.jaxb2.maven2</groupId>  
                <artifactId>maven-jaxb2-plugin</artifactId>  
                <executions>  
                        <execution>  
                            <id>adsSchema</id>  
                            <goals>  
                                    <goal>generate</goal>  
                            </goals>  
                                <configuration>  
                                    <args>  
                                        <param>-npa</param>  
                                    </args>  
                                    <!-- the package for the generated java classes -->  
                                    <generatePackage>com.ads.beans</generatePackage>  
                                    <npa>true</npa>  
                                    <!-- include the following schemas only; by default all …
Run Code Online (Sandbox Code Playgroud)

jaxb maven maven-jaxb2-plugin

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

JAXB Eclipse MOXy Nullable 值并仅检索 Map 中的指定键

我还有一个更棘手的问题:

E.g. Person Class has: --String firstName --String lastName --Map stringMap

   Person person = new Person ();
   person.setFirstName("FirstName");
   person.setLastName("LastName");
   Map<String,String> stringMap = new HashMap<String,String>();
   stringMap.put("IwantThisKeyInXml","IwantThisValueInXml");
   stringMap.put("IDONTwantThisKeyInXml","IDONTwantThisValueInXml");


   InputStream iStream1 = classLoader.getResourceAsStream("person-binding.xml");
   List<Object> fileList = new ArrayList<Object>();
            fileList.add(iStream1);
   Map<String, Object> properties = new HashMap<String,Object>();               

   properties.put(JAXBContextProperties.OXM_METADATA_SOURCE,  fileList);
   JAXBContext ctx = JAXBContext.newInstance(new Class[] { GaDictionary.class, Person.class }, properties);

   Marshaller marshaller = ctx.createMarshaller();
   marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

   Writer output = new StringWriter();
   marshaller.marshal(person, output);
   System.out.println(output);
Run Code Online (Sandbox Code Playgroud)

person-binding.xml 如下

   <?xml version="1.0"?>
   <xml-bindings
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
    package-name="my.test.model"  xml-mapping-metadata-complete="true">
    <xml-schema
        element-form-default="QUALIFIED"/>
    <java-types>
        <java-type …
Run Code Online (Sandbox Code Playgroud)

jaxb eclipselink jaxb2 moxy

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

如何重命名 jaxb xjc 中的嵌套类

我有一个 wsdl 导入一个模式,我试图解析 xjc 命名多个具有相同名称的嵌套 MyElementName 类 - 这不会编译我在下面创建了这个绑定文件,但它给出了错误:

parsing a schema...
compiling a schema...
Exception in thread "main" java.lang.IllegalArgumentException: Illegal class inheritance loop.  
Outer class MyElementName1 may not subclass from inner class: MyElementName1
    at com.sun.codemodel.internal.JDefinedClass._extends(JDefinedClass.java:257)
    at com.sun.tools.internal.xjc.generator.bean.ImplStructureStrategy$1._extends(ImplStructureStrategy.java:104)
    at com.sun.tools.internal.xjc.generator.bean.BeanGenerator.<init>(BeanGenerator.java:197)
    at com.sun.tools.internal.xjc.generator.bean.BeanGenerator.generate(BeanGenerator.java:151)
    at com.sun.tools.internal.xjc.model.Model.generateCode(Model.java:275)
    at com.sun.tools.internal.xjc.Driver.run(Driver.java:342)
    at com.sun.tools.internal.xjc.Driver.run(Driver.java:184)
    at com.sun.tools.internal.xjc.Driver._main(Driver.java:107)
    at com.sun.tools.internal.xjc.Driver.access$000(Driver.java:64)
    at com.sun.tools.internal.xjc.Driver$1.run(Driver.java:87)
Run Code Online (Sandbox Code Playgroud)

我删除了 MyElementName1 的第一个绑定,它工作正常,但只命名了 1 个类,我想更改这两个名称,如何更改绑定文件,以便它将两个旧的嵌套类正确命名为我在下面选择的两个唯一名称。我想这样做是因为我有其他映射,其中有 4 个同名的嵌套类,因此需要能够命名每个类来解决更多嵌套的问题区域

<jaxb:bindings 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    version="2.1">
    <jaxb:bindings schemaLocation="MYWSDL.wsdl">    
        <jaxb:bindings node="//xsd:element[@name='AAAA']//xsd:complexType//xsd:sequence/xsd:element[@name='BBB']//xsd:complexType/xsd:sequence//xsd:element[@name='MyElementName']">
            <jaxb:class name="MyElementName1"/>
        </jaxb:bindings>               
        <jaxb:bindings node="//xsd:element[@name='AAAA']//xsd:sequence/xsd:element[@name='BBB']//xsd:element[@name='MyElementName']//xsd:sequence/xsd:element[@name='CCC']//xsd:sequence/xsd:element[@name='MyElementName']/xsd:complexType">
            <jaxb:class name="MyElementName2"/>
        </jaxb:bindings>
    </jaxb:bindings>
</jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)

这是 …

java binding jaxb xjc

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

架构中的 Jaxb 类生成大写的 getter setter 方法

我正在使用 JAX-WS 生成自上而下的 Web 服务。在 wsdl 中,我导入一个包含所有必要元素的 xsd。我需要在soap 请求中以大写形式显示所有xml 节点,因此我将xsd 中的元素名称保留为大写。但是,在从 wsdl 生成类时,我可以看到 getter 和 setter 方法也以大写形式命名,但变量却没有。例如,如果我使用“SOURCE”作为 xsd 中的元素,我将获得相应的 getter 方法作为“getSOURCE”,而不是常规约定“getSource”。我尝试通过从架构生成 jaxb 类并单独保留 xsd 来进行游戏,但我无法获得预期的命名约定。

以下是使用的架构的一部分

<xs:complexType name="Data">
<xs:sequence>
  <xs:element name="SEQ" type="xs:int"/>
  <xs:element name="INDEX" type="xs:string"/>
  <xs:element name="VALUE" type="xs:string"/>
</xs:sequence>
Run Code Online (Sandbox Code Playgroud)

这会在 jaxb 绑定后生成以下代码 -

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Data", propOrder = {
    "seq",
    "index",
    "value"
})
public class Data {

@XmlElement(name = "SEQ")
protected int seq;
@XmlElement(name = "INDEX", required = true)
protected String index;
@XmlElement(name = "VALUE", required = true)
protected …
Run Code Online (Sandbox Code Playgroud)

java xml xsd web-services jaxb

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

Java 序列化、JSON、JAXB 之间的区别?

对象对 Serialized 接口的实现是否与该对象序列化为 JSON 或 XML 的能力相关?Java 序列化使用的文本格式有名称吗?如果不是,我们是否应该使用“序列化”一词来描述将对象导出为 JSON 或 XML,以避免混淆?在 AO 中,这三种序列化方法的典型用途是什么?

我知道 JAXB 通常用于将 XML 转换为 Java,而不是相反,但我听说相反的情况也是可能的。

java xml serialization json jaxb

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

使用带有java路由的camel jaxb时出错

根据 Camel 文档,我创建了 JaxbDataFormat(文档中的示例代码使用了不存在的构造函数?)

@Override
public void configure() throws Exception {

    JaxbDataFormat jaxbDataFormat = new JaxbDataFormat();
    jaxbDataFormat.setContextPath("somepackage");
Run Code Online (Sandbox Code Playgroud)

我有 pom 依赖

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jaxb</artifactId>
        <version>2.18.3</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

不起作用:“ConvertBody...因为无法创建数据格式'jaxb'。”

有人可以给出一个示例代码,说明 jaxb 转换应该如何与 Camel 一起使用。我有 Camel in Action 2ed,但那里的示例使用 XML-definde 路由。使用 XML 的过程似乎很简单 - 但我对使用 xml 作为编程语言不是很热情;)

使用 Java 8。

………………

线程“CamelMainRunController”中的异常java.lang.RuntimeException:org.apache.camel.FailedToCreateRouteException:无法在以下位置创建路由route2:>>> Marshal[org.apache.camel.model.dataformat.JaxbDataFormat@57d7f108] <<< in路线:Route(route2)[[From[activemq:gateway.queue]] -> [OnException... 因为无法创建数据格式'jaxb'。确保数据格式有效并且关联的 Camel 组件存在于 org.apache.camel.spring.boot.CamelSpringBootApplicationController.run(CamelSpringBootApplicationController.java:74) 处的类路径中 org.apache.camel.spring.boot.CamelMainRunController $DaemonTask.run(CamelMainRunController.java:42) at java.lang.Thread.run(Thread.java:745) 引起:org.apache.camel.FailedToCreateRouteException:无法在以下位置创建路由 route2:>>> Marshal[org.apache.camel.model.dataformat.JaxbDataFormat@57d7f108] <<< in route: Route(route2)[[From[activemq:gateway.queue]] -> [OnException... 因为数据无法创建格式“jaxb”。确保数据格式有效,并且关联的 Camel 组件存在于 org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1071) 的类路径中,位于 org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition) .java:196) 在 org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:984) …

jaxb apache-camel

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

将 Powerclass 用于使用 JAXB 的测试类时出现链接错误

`java.lang.LinkageError: loader constraint violation: when resolving overridden method "com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshal

`Exception(Lorg/xml/sax/SAXException;)Ljavax/xml/bind/UnmarshalException;" the class loader (instance of org/powermock/core/classloader/MockClassLoader) of the current class, com/sun/xml/bind/v2/runtime/unmarshaller/UnmarshallerImpl, and its superclass loader (instance of <bootloader>), have different Class objects for the type org/xml/sax/SAXException used in the signature
Run Code Online (Sandbox Code Playgroud)

我正在使用 Powermock 在 JUNIT 测试用例中模拟静态类。由于我的 junit 使用 xml 文件,所以我收到了一些错误,我必须使用 powermock 忽略,如下所示。

@PowerMockIgnore({ "javax.xml.*"})
@RunWith(PowerMockRunner.class)
Run Code Online (Sandbox Code Playgroud)

我收到链接错误以及以下错误。请指教

javax.xml.transform.TransformerFactoryConfigurationError: Provider for class javax.xml.transform.TransformerFactory cannot be created
Run Code Online (Sandbox Code Playgroud)

java junit jaxb powermock powermockito

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

JAXB 解组:意外元素

背景

我正在使用 JAXB 将 XML 解组为 Java 对象。最初,我只使用 JAXB 来执行解组。然后对代码进行了静态分析,并提出了 XML 外部实体注入的高危问题。经过一番研究后,我发现了一个建议(https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#JAXB_Unmarshaller)使用配置为防止解析外部实体的解析器。提供了该怎么做的示例:

//Disable XXE
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature("http://xml.org/sax/features/external-general-entities", false);
spf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

//Do unmarshall operation
Source xmlSource = new SAXSource(spf.newSAXParser().getXMLReader(), new InputSource(new StringReader(xml)));
JAXBContext jc = JAXBContext.newInstance(Object.class);
Unmarshaller um = jc.createUnmarshaller();
um.unmarshal(xmlSource);
Run Code Online (Sandbox Code Playgroud)

我没有完全按照所示方式完成此操作,但我相信我实际上已经做了相同的操作:

XMLReader reader = getXMLReader();

if (reader == null) {
  logger.warn("Unable to create XML reader");
  return;
}

JAXBContext context = JAXBContext.newInstance(messageClass);
Unmarshaller unmarshaller = context.createUnmarshaller();

for (File file : files) {
  try { …
Run Code Online (Sandbox Code Playgroud)

java xml jaxb

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

xpath:前缀必须解析为名称空间:xsd

我是使用 jaxb2 的菜鸟。我收到此错误:“xpath:前缀必须解析为命名空间:xsd”,我不知道如何修复它。发生这种情况是因为我有两个 xsd 文件试图设计相同的类,但位于我的 java 应用程序的不同包中

<jxb:bindings schemaLocation="../documentazione/xsd/Global/datatypes_global_v62.xsd">

        <jxb:schemaBindings>
            <jxb:package name="com.companyname.plugin.entities.global" />
        </jxb:schemaBindings>

        <jxb:bindings node="//xsd:complexType[@name='Contact']">
            <jxb:class name="GlobalContact" />
        </jxb:bindings>

    </jxb:bindings>


    <jxb:bindings schemaLocation="../documentazione/xsd/Global/pickupdatatypes_global-3.0.xsd">
        <jxb:schemaBindings>
            <jxb:package name="com.companyname.plugin.entities.pickup" />
        </jxb:schemaBindings>
        <jxb:bindings node="xsd://complexType[@name='contact']" >
            <jxb:class name="Contact" />
        </jxb:bindings>
    </jxb:bindings>
Run Code Online (Sandbox Code Playgroud)

我已经尝试运行该插件,但我不知道如何修复该错误。

java binding namespaces jaxb maven

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

如何创建采用 Generic 对象的 JAXB Marshaller

本质上,我想做的是创建一个编组器,它可以接受我给它的任何类对象,例如汽车对象或人对象,并且它必须返回 XML 字符串。

这是我到目前为止所得到的:

 public <T> String CreateXML(T objToSerialize)
    {
        String xml = "";
        try 
        {           

        JAXBContext context = JAXBContext.newInstance(objToSerialize.getClass());
        Marshaller marshaler = context.createMarshaller(); 
        StringWriter writer = new StringWriter();
        marshaler.marshal(objToSerialize.getClass(),writer);
        xml = writer.toString();
            System.out.println(xml);
            return xml;
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return xml;
    }
Run Code Online (Sandbox Code Playgroud)

它给了我以下错误:

警告:发生了非法反射访问操作

java xml jaxb

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