簡體   English   中英

JAXB 命名空間前綴缺失

[英]JAXB namespace prefixes missing

我從 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 控制它?

非常感謝

您可以在package-info class 上使用@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。 看看這個鏈接http://bdoughan.blogspot.com/2010/08/jaxb-namespaces.html並使用命名空間選項。 具體來說

@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")

用於 class 聲明

@XmlElement(namespace="http://www.example.org/property")

用於屬性。

某些組合或僅其中一個選項可能會給您想要的東西。 但是,您應該明白,當您從有效的 xml 移動到 xml 時,您正在打一場艱苦的戰斗,必須在所有元素上包含特定的命名空間前綴。

根據 XML 規范,兩個 xml 是相同的,因為 xmlns="" 定義了適用於當前和所有子元素的默認命名空間。 XML 解析器在這兩種情況下都應該為您提供相同的 DOM 或 SAX

我做了以下步驟,一切正常。 基本上我已經從 wsdl 或您擁有的任何模式文件中編譯。

  1. https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-ri/下載(我使用的是 2.3.4 版)
  2. 使用以下命令:
xjc.sh -wsdl -npa -mark-generated -d src/main/java -p your.package.hierarchy src/main/resources/wsdl/*

我有 wsdl 文件,這就是第一個標志的原因,-npa 是在注釋中而不是在 package-info.java 中添加命名空間信息,因為由於某種原因這對我不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM