在两个对象之间生成客户端 wsimport miss link

generate client wsimport miss link between two object

我想使用 wsimport maven 插件从 wsdl 生成客户端存根,这很好用,但有一个问题:我有两个对象应该链接在一起,但生成完成后,它并不完美

<types>
    <xsd:schema elementFormDefault="qualified" targetNamespace="http://www.hello.com/ns/xsd/boba/restitution-restituerCarriereAvecValo.xsd">
      <xsd:import namespace="http://www.hello.com/holla/infosRetour.xsd" schemaLocation="xsd/infosRetour.xsd"/>


      <xsd:import namespace="http://www.hello.com/ns/wsdl/boba/messageRetourModuleValorisation.xsd" schemaLocation="xsd/messageRetourModuleValorisation.xsd"/>

      <xsd:element name="messageIn" type="xsd:anyType"/>
      <xsd:element name="messageOut">
        <xsd:complexType>
          <xsd:complexContent>
            <xsd:extension base="ir:infosRetour">
              <xsd:choice>
                <xsd:element name="messageRetour" type="xsd:anyType"/>
                <xsd:element name="rejetControleSyntaxiqueSemantique" type="xsd:anyType"/>
                <xsd:element name="rejetControleIdentification" type="xsd:anyType"/>
              </xsd:choice>
            </xsd:extension>
          </xsd:complexContent>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
  </types>

这里我的对象 messageOut 应该有一个字段 messageRetour messageRetour class,但是当我看到我的 class messageOut此字段设置为对象而不是提到的 class.

 @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "messageRetour",
    "rejetControleSyntaxiqueSemantique",
    "rejetControleIdentification"
})
@XmlRootElement(name = "messageOut")
public class MessageOut
    extends InfosRetour
{

    protected Object messageRetour;
    protected Object rejetControleSyntaxiqueSemantique;
    protected Object rejetControleIdentification;

正如你在这里看到的,这里是生成的子class,你可以看到有一个名为messageRetour

的class

如何将此类型更改为 CLASS 而不是对象?

即使我将这一行 <xsd:element name="messageRetour" type="xsd:anyType"/> 更改为 <xsd:element name="messageRetour"/> 我也总是遇到同样的问题 Object 而不是 class

你得到 Object 因为 xsd:anyType 作为类型。

您应该将 <xsd:element name="messageRetour" type="xsd:anyType"/> 的类型更改为 messageRetour 类型。

这种类型可能是由您导入的模式之一提供的。具体名字我不太确定,大概是MessageRetour或者messageRetour或者message-retour之类的吧。所以它可能是这样的:

<xsd:element name="messageRetour" type="ir:messageRetour"/>

如果类型是由其他导入的模式提供的,您可能需要先声明一个命名空间前缀(如xmlns:mrmv="http://www.hello.com/ns/wsdl/boba/messageRetourModuleValorisation.xsd"),然后使用mrmv:messageRetour作为类型。