Как избежать пространства имен на XmlElement везде - PullRequest
0 голосов
/ 10 октября 2018

У меня есть конечная точка spring-ws и я использую jaxb (поставщик moxy) для отмены маршала.Я хочу избежать необходимости указывать пространство имен во всех полях класса, если пространство имен совпадает с содержащим классом.

Допустим, я хочу отправить этот простой xml

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:p="http://example.com/parents"
                  xmlns:c="http://example.com/children">
  <soapenv:Header/>
  <soapenv:Body>
    <p:parent>
      <c:child>
        <c:field1>value1</c:field1>
        <c:field2>value2</c:field2>
        <c:field3>value3</c:field3>
      </c:child>
    </p:parent>
  </soapenv:Body>
</soapenv:Envelope>

Этиявляются ли мои доменные объекты

@XmlRootElement(name="parent", namespace="http://example.com/parents")
public class Parent {

  private Child child;

  @XmlElement(namespace = "http://example.com/children")
  public Child getChild() {
    return child;
  }

  public void setChild(Child child) {
    this.child = child;
  }
}

@XmlType(namespace = "http://example.com/children")
public class Child {

  private String field1;
  private String field2;
  private String field3;

  @XmlElement(name = "field1", namespace = "http://example.com/children")
  public String getField1() {
    return field1;
  }

  public void setField1(String field1) {
    this.field1 = field1;
  }

  public String getField2() {
    return field2;
  }

  public void setField2(String field2) {
    this.field2 = field2;
  }

  @XmlElement(name = "field3")
  public String getField3() {
    return field3;
  }

  public void setField3(String field3) {
    this.field3 = field3;
  }
}

Я заметил, что field1 имеет значение value1, однако field2 и field3 имеют значение null.Я ожидал бы, что пространства имен в XmlType или пространства имен в дочернем поле в Parent было бы достаточно.

Я также попытался использовать класс packge-info.java

@XmlSchema(
    namespace="http://example.com/parents",
    xmlns={
        @XmlNs(prefix="p", namespaceURI="http://example.com/parents"),
        @XmlNs(prefix="c", namespaceURI="http://example.com/children")
    },
    elementFormDefault=XmlNsForm.UNQUALIFIED)
package com.example.domain;

И я добавил это к field2

@XmlElement(name = "c:field2")

После этого field1 и field2 установлены на правильное значение, но field3 по-прежнему равно нулю.Я ценю любую помощь.

версии:

spring.ws: 3.0.4.RELEASE

moxy: 2.7.3

...