[英]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 或您擁有的任何模式文件中編譯。
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.