intellij idea中如何生成wsdl客户端

how to generate wsdl client in intelij idea

这是我能生成的问题的最简化版本。

我有一个网络服务:

@WebService()
public class Service {
  @WebMethod
  public IsLoggedInResponse IsLoggedIn() {
    return new IsLoggedInResponse();
  }
}

这是class我return:

@XmlRootElement
public class IsLoggedInResponse {
    private boolean isLoggedIn;

    public IsLoggedInResponse(boolean isLoggedIn) {
        this.isLoggedIn = isLoggedIn;
    }

    public IsLoggedInResponse() {
        // TODO Auto-generated constructor stub
    }

    @XmlElement
    public boolean isLoggedIn() {
        return isLoggedIn;
    }

    public void setLoggedIn(boolean isLoggedIn) {
        this.isLoggedIn = isLoggedIn;
    }
}

这是 xsd 右键单击​​ webserivce 并从 java 生成 wsdl 代码时生成的 xsd:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" targetNamespace="http://webservice.pubsale.com/" xmlns:tns="http://webservice.pubsale.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="IsLoggedIn" type="tns:IsLoggedIn"/>

  <xs:element name="IsLoggedInResponse" type="tns:IsLoggedInResponse"/>

  <xs:element name="IsLoggedInResponse" type="tns:IsLoggedInResponse"/>

  <xs:complexType name="IsLoggedIn">
    <xs:sequence/>
  </xs:complexType>

  <xs:complexType name="IsLoggedInResponse">
    <xs:sequence>
      <xs:element name="return" type="tns:isLoggedInResponse" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="isLoggedInResponse">
    <xs:sequence>
      <xs:element name="loggedIn" type="xs:boolean"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

注意 isLoggedInResponse 被创建了两次。为什么?我该如何阻止它?

好的,每个 webmethod 似乎都有问题 'METHODNAME' JAXB 在模式中创建了一个名为 METHODNAMEResponse 的复杂类型

我的解决方案是将 "DTO" 添加到我所有的 requests/responses。

也可以更改我的方法名称

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" targetNamespace="http://webservice.pubsale.com/" xmlns:tns="http://webservice.pubsale.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="IsLoggedIn" type="tns:IsLoggedIn"/>

  <xs:element name="IsLoggedInResponse" type="tns:IsLoggedInResponse"/>

  <xs:element name="isLoggedInResponseDTO" type="tns:isLoggedInResponseDTO"/>

  <xs:complexType name="IsLoggedIn">
    <xs:sequence/>
  </xs:complexType>

  <xs:complexType name="IsLoggedInResponse">
    <xs:sequence>
      <xs:element name="return" type="tns:isLoggedInResponse" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>