Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 缺少JAXB命名空间前缀_Java_Jaxb - Fatal编程技术网

Java 缺少JAXB命名空间前缀

Java 缺少JAXB命名空间前缀,java,jaxb,Java,Jaxb,我已经从XSD生成了Java类,从解组的角度来看,所有这些都可以很好地工作 但是,当我使用JAXB类时,我得到了以下结果: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <message xmlns="http://poc.cmc.com/ScreenLayout"> <Data> <Type>Sample</Type> . . . &l

我已经从XSD生成了Java类,从解组的角度来看,所有这些都可以很好地工作

但是,当我使用JAXB类时,我得到了以下结果:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message xmlns="http://poc.cmc.com/ScreenLayout">
    <Data>
        <Type>Sample</Type>
     . . .
</message>

样品
. . .
但我需要

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns0:message xmlns:ns0="http://poc.cmc.com/ScreenLayout">
    <ns0:Data>
        <ns0:Type>Sample</ns0:Type>
    . . .

样品
. . .
我如何从Java控制它


非常感谢

根据XML规范,两个XML都是相同的,因为xmlns=”“定义了默认名称空间,该名称空间应用于当前和所有子元素。
XML解析器在这两种情况下都应该为您提供相同的DOM或SAX

您可以使用
包信息
类上的
@XmlSchema
注释为命名空间分配前缀:

@XmlSchema(
    namespace = "http://poc.cmc.com/ScreenLayout",
    elementFormDefault = XmlNsForm.QUALIFIED,
    xmlns={@XmlNs(prefix="ns0", namespaceURI="http://poc.cmc.com/ScreenLayout")})    
package your.package;


import javax.xml.bind.annotation.*;

不能发表评论

因为消费应用程序非常愚蠢,需要前缀

在这种情况下,哑应用程序并不真正使用xml。查看此链接并使用名称空间选项。具体地

@XmlSchema (
   xmlns = {
         @javax.xml.bind.annotation.XmlNs(prefix = "ns1", namespaceURI="http:test"),
         @javax.xml.bind.annotation.XmlNs(prefix = "xsd", namespaceURI="http:www.w3.org2001XMLSchema")
   },
   namespace = "http:test",
   elementFormDefault = XmlNsForm.UNQUALIFIED,
   attributeFormDefault = XmlNsForm.UNSET
)
在package-info.java文件中使用

@XmlType(namespace="http://www.example.org/type")
用于类声明

@XmlElement(namespace="http://www.example.org/property")
用于财产


这些选项中的某些组合或仅一个可能会满足您的需求。但是,您应该明白,当您从有效的xml转换为所有元素都必须包含特定名称空间前缀的xml时,您正在进行一场艰苦的战斗。

我完成了以下步骤,一切都正常。基本上,我已经编译了wsdl或任何模式文件

  • 下载自 (我使用了2.3.4版)
  • 使用以下命令:
  • xjc.sh-wsdl-npa-mark-generated-dsrc/main/java-p your.package.hierarchy src/main/resources/wsdl/*
    

    我有wsdl文件,这就是第一个标志的原因,-npa是在注释中添加名称空间信息,而不是在package-info.java上,因为出于某种原因,这对我不起作用。

    第一个列表完全有效;它的默认名称空间设置为“http://poc.cmc.com/ScreenLayout”。为什么需要名称空间前缀?您好,因为消费应用程序非常愚蠢,需要前缀,而且我们无法控制它。我们没有测试它,但这很好。不幸的是,java文件是生成的,所以您需要构建过程来将此自定义文件放置在与生成的文件相同的位置……我不知道的是,我的项目中有近20个包信息类。我需要添加哪一个@XmlNs info?@hellzone-以下链接可能会有所帮助:@blaise我在我的Web服务中采用了这种方法。我们将cxf2.1.7与websphere8.5中的jaxb 2.1.7一起使用。但我得到的是前缀“a”而不是ns2。我怎样才能回到ns2?相同的应用程序和相同的JAR工作正常,请求在WebSphere7上正确生成。此问题仅在websphere8.5中出现。任何指针请?好,用package info.java:@javax.xml.bind.annotation.XmlSchema(namespace=“”,xmlns={@xmlns(namespaceURI=“”,prefix=“ns1”)},elementFormDefault=XmlNsForm.QUALIFIED解决)