改变 soap 根元素的 xmlns 值

问题描述 投票:0回答:3
java soap xsd jaxb saaj
3个回答
0
投票

我会试试

@XmlRootElement(name = "AirShoppingRQ", namespace = "http://www.iata.org/IATA/EDIST/2017.2")
public class AirShoppingRQ {
}

或者如果您有一个将该命名空间作为 targetNamespace 的架构,我认为您可以使用例如

@XmlRootElement(name = "AirShoppingRQ", namespace = "##default")
public class AirShoppingRQ {
}

0
投票

您在问题中提到您尝试通过编辑

package-info.java
来提供名称空间前缀映射,但实际上您没有提供IATA 相关名称空间的映射。您是否尝试过以下方法?

@javax.xml.bind.annotation.XmlSchema(
  xmlns = {
    @javax.xml.bind.annotation.XmlNs(
      prefix = "xsd",
      namespaceURI = "http://www.w3.org/2001/XMLSchema"
    ),
    @javax.xml.bind.annotation.XmlNs(
      prefix = "xsi",
      namespaceURI = "http://www.w3.org/2001/XMLSchema-instance"
    ),
    @javax.xml.bind.annotation.XmlNs(
      prefix = "iata",
      namespaceURI = "http://www.iata.org/IATA/EDIST/2017.2"
    )
  }
)

0
投票

要将“xmlns”属性的值设置为特定命名空间 URI,您可以将以下注释添加到您的 AirShoppingRQ 类:

@XmlRootElement(name = "AirShoppingRQ", namespace = "http://www.iata.org/IATA/EDIST/2017.2")
public class AirShoppingRQ {
    //...
}

这会将 AirShoppingRQ 的名称空间 URI 设置为“http://www.iata.org/IATA/EDIST/2017.2”,并且应该生成所需的 XML。

您还应该从 package-info.java 文件中删除 @XmlSchema 注释,因为这对于设置单个元素的名称空间 URI 不是必需的。

但是如果服务器不接受前缀为“ns2”或“ns3”的命名空间,那么您应该确保您用于 AirShoppingRQ 元素的命名空间 URI 没有前缀。

@XmlSchema(
    namespace = "http://www.iata.org/IATA/EDIST/2017.2",
    elementFormDefault = XmlNsForm.QUALIFIED,
    xmlns = {
        @XmlNs(namespaceURI = "http://www.iata.org/IATA/EDIST/2017.2", prefix = "")
    }
)
package com.example;

import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

© www.soinside.com 2019 - 2024. All rights reserved.