【问题标题】:Java web service code first set element as requiredJava Web 服务代码首先根据需要设置元素
【发布时间】:2015-10-01 07:37:49
【问题描述】:

我正在用 java 构建一个代码优先的 web 服务,并用 maven 构建它。网络服务本身运行良好,但我无法摆脱

minOccurs="0"

在我生成的 wsdl 中:

<xs:complexType name="getHOP">
  <xs:sequence>
    <xs:element minOccurs="0" name="getHopRequest" type="getHopRequest"/>
  </xs:sequence>
</xs:complexType>
<xs:element name="getHOPResponse" type="getHOPResponse"/>
<xs:complexType name="getHOPResponse">
  <xs:sequence>
    <xs:element minOccurs="0" name="return" type="getHopResponse"/>
  </xs:sequence>
</xs:complexType>

我的界面是这样的

@WebService
public interface GetHop {

GetHopResponse getHOP(
        @WebParam(name = "getHopRequest") GetHopRequest getHopRequest);
}

这是我的请求类

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "getHopRequest", propOrder = { "companyId", "countryIsoCode",
    "currencyIsoCode", "paymentMethodId", "customerId", "totalAmount",
    "cartId", "successUrl", "failureUrl", "notifyUrl" })
public class GetHopRequest {

@XmlElement(required = true)
private String companyId;
@XmlElement(required = true)
private String countryIsoCode;
@XmlElement(required = true)
private String currencyIsoCode;
@XmlElement(required = true)
private String paymentMethodId;
@XmlElement(required = true)
private String customerId;
@XmlElement(required = true)
private String totalAmount;
@XmlElement(required = true)
private String cartId;
@XmlElement(required = true)
private String successUrl;
@XmlElement(required = true)
private String failureUrl;
@XmlElement(required = true)
private String notifyUrl;

// Getter and setter here

}

已经能够按照要求设置getHopRequest中的所有元素

@XmlElement(required = true)

但我不知道如何为请求/响应本身执行此操作。

谁能告诉我怎么做?

【问题讨论】:

    标签: java web-services jax-ws


    【解决方案1】:

    这没有经过验证或测试。

    您可以在您的Web方法的Web服务参数上添加@XmlElement,并设置required=true,如下:

    @WebService
    public interface GetHop {
    
    GetHopResponse getHOP(
            @WebParam(name = "getHopRequest") @XmlElement(required=true) GetHopRequest getHopRequest);
    }
    

    【讨论】:

    • 另外,重新发布另一个答案并不是真正正确的行为。 cmets中的链接会更好,或者,如果您认为问题过于相似,请重复投票。
    • @Keppil 我先回答了这个问题,然后在 Google 上寻找类似的答案。此外,在 SO 上找到的任何问题都没有被接受为重复投票。
    • 在这种情况下,当你发现一个几乎相同的答案时删除这个答案是有意义的,对吧?
    • 好吧,答案总结了我真正需要的东西,它不会伤害任何人 - 不幸的是它也不起作用^^
    【解决方案2】:

    原始类型而不是原始类型可能在编组对象中具有null 值。默认情况下它们不是必需的,minOccurs="0" 表示它们可能根本不存在。

    如果您需要删除minOccurs="0",那么您应该使用:

    @XmlElement(nillable=false, required=true)

    之后生成的 WSDL 将不包含minOccurs,因为minOccurs 具有默认值1,它会被忽略。

    【讨论】:

    • 在我的界面中添加了这个,并在服务中尝试了它,但仍然不起作用:/ 仅适用于所有这些 String 类型,如您在上面看到的,但不适用于整个请求本身跨度>
    猜你喜欢
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多