1

私の問題は、SOAP UI (JAX-WS クライアント) を介して Java 生成コードからリクエストを送信すると、SOAP 生成リクエストに null パラメータが含まれることです。

サードパーティの WSDL から SOAP クライアントを生成しているため、WSDL の変更を制御できません。

Java 生成クライアントからのメッセージには、null 値を持つパラメータがありません。空の要素が必要です。これは<authId>&です<reserved>

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <BillPayment xmlns="http://action.one.worldnet.org">
        <userName>test</userName>
        <password>testing2</password>
        <AccountNumber>10385699</AccountNumber>
        <amount>0000000002300</amount>
        <tranDate>20130311</tranDate>
        <tranTime>064536</tranTime>
        <bankMnemonic>TIMEPAY</bankMnemonic>
        </BillPayment>
    </S:Body>
</S:Envelope>

値が null の要素を持つ SOAPUI からのメッセージ。

<soap:Body>
    <soap:Envelope>"
      <act:BillPayment>
         <act:userName>test</act:userName>
         <act:password>testing2</act:password>
         <act:AccountNumber>9132388</act:AccountNumber>
         <act:authId></act:authId>
         <act:amount>0000000010000</act:amount>
         <act:tranDate>20130311</act:tranDate>
         <act:tranTime>172345</act:tranTime>
         <act:bankMnemonic>THIRDParty</act:bankMnemonic>
         <act:reserved></act:reserved>
      </act:BillPayment>
   </soap:Body>
</soap:Envelope>"

以下は、生成された BillPayment クラスです

@XmlAccessorType(XmlAccessType.FIELD)

@XmlType(name = "", propOrder = { "userName", "password", "accountNumber", "authId", "amount", "tranDate", "tranTime", "bankMnemonic", "reserved" }) @XmlRootElement (name = "BillPayment") public class BillPayment {

@XmlElementRef(name = "userName", namespace = "http://action.wirelessnet.org", type = JAXBElement.class)
protected JAXBElement<String> userName;
@XmlElementRef(name = "password", namespace = "http://action.wirelessnet.org", type = JAXBElement.class)
protected JAXBElement<String> password;
@XmlElementRef(name = "AccountNumber", namespace = "http://action.wirelessnet.org", type = JAXBElement.class)
protected JAXBElement<String> accountNumber;
@XmlElementRef(name = "authId", namespace = "http://action.wirelessnet.org", type = JAXBElement.class)
protected JAXBElement<String> authId;
@XmlElementRef(name = "amount", namespace = "http://action.wirelessnet.org", type = JAXBElement.class)
protected JAXBElement<String> amount;
@XmlElementRef(name = "tranDate", namespace = "http://action.wirelessnet.org", type = JAXBElement.class)
protected JAXBElement<String> tranDate;
@XmlElementRef(name = "tranTime", namespace = "http://action.wirelessnet.org", type = JAXBElement.class)
protected JAXBElement<String> tranTime;
@XmlElementRef(name = "bankMnemonic", namespace = "http://action.wirelessnet.org", type = JAXBElement.class)
protected JAXBElement<String> bankMnemonic;
@XmlElementRef(name = "reserved", namespace = "http://action.wirelessnet.org", type = JAXBElement.class)
protected JAXBElement<String> reserved;

/**
 * Gets the value of the userName property.
 * 
 * @return possible object is {@link JAXBElement }{@code <}{@link String }
 *         {@code >}
 * 
 */
public JAXBElement<String> getUserName() {
    return userName;
}

/**
 * Sets the value of the userName property.
 * 
 * @param value
 *            allowed object is {@link JAXBElement }{@code <}{@link String }
 *            {@code >}
 * 
 */
public void setUserName(JAXBElement<String> value) {
    this.userName = ((JAXBElement<String>) value);
}

/**
 * Gets the value of the password property.
 * 
 * @return possible object is {@link JAXBElement }{@code <}{@link String }
 *         {@code >}
 * 
 */
public JAXBElement<String> getPassword() {
    return password;
}

/**
 * Sets the value of the password property.
 * 
 * @param value
 *            allowed object is {@link JAXBElement }{@code <}{@link String }
 *            {@code >}
 * 
 */
public void setPassword(JAXBElement<String> value) {
    this.password = ((JAXBElement<String>) value);
}

/**
 * Gets the value of the accountNumber property.
 * 
 * @return possible object is {@link JAXBElement }{@code <}{@link String }
 *         {@code >}
 * 
 */
public JAXBElement<String> getAccountNumber() {
    return accountNumber;
}

/**
 * Sets the value of the accountNumber property.
 * 
 * @param value
 *            allowed object is {@link JAXBElement }{@code <}{@link String }
 *            {@code >}
 * 
 */
public void setAccountNumber(JAXBElement<String> value) {
    this.accountNumber = ((JAXBElement<String>) value);
}

/**
 * Gets the value of the authId property.
 * 
 * @return possible object is {@link JAXBElement }{@code <}{@link String }
 *         {@code >}
 * 
 */
public JAXBElement<String> getAuthId() {
    return authId;
}

/**
 * Sets the value of the authId property.
 * 
 * @param value
 *            allowed object is {@link JAXBElement }{@code <}{@link String }
 *            {@code >}
 * 
 */
public void setAuthId(JAXBElement<String> value) {
    this.authId = ((JAXBElement<String>) value);
}

/**
 * Gets the value of the amount property.
 * 
 * @return possible object is {@link JAXBElement }{@code <}{@link String }
 *         {@code >}
 * 
 */
public JAXBElement<String> getAmount() {
    return amount;
}

/**
 * Sets the value of the amount property.
 * 
 * @param value
 *            allowed object is {@link JAXBElement }{@code <}{@link String }
 *            {@code >}
 * 
 */
public void setAmount(JAXBElement<String> value) {
    this.amount = ((JAXBElement<String>) value);
}

/**
 * Gets the value of the tranDate property.
 * 
 * @return possible object is {@link JAXBElement }{@code <}{@link String }
 *         {@code >}
 * 
 */
public JAXBElement<String> getTranDate() {
    return tranDate;
}

/**
 * Sets the value of the tranDate property.
 * 
 * @param value
 *            allowed object is {@link JAXBElement }{@code <}{@link String }
 *            {@code >}
 * 
 */
public void setTranDate(JAXBElement<String> value) {
    this.tranDate = ((JAXBElement<String>) value);
}

/**
 * Gets the value of the tranTime property.
 * 
 * @return possible object is {@link JAXBElement }{@code <}{@link String }
 *         {@code >}
 * 
 */
public JAXBElement<String> getTranTime() {
    return tranTime;
}

/**
 * Sets the value of the tranTime property.
 * 
 * @param value
 *            allowed object is {@link JAXBElement }{@code <}{@link String }
 *            {@code >}
 * 
 */
public void setTranTime(JAXBElement<String> value) {
    this.tranTime = ((JAXBElement<String>) value);
}

/**
 * Gets the value of the bankMnemonic property.
 * 
 * @return possible object is {@link JAXBElement }{@code <}{@link String }
 *         {@code >}
 * 
 */
public JAXBElement<String> getBankMnemonic() {
    return bankMnemonic;
}

/**
 * Sets the value of the bankMnemonic property.
 * 
 * @param value
 *            allowed object is {@link JAXBElement }{@code <}{@link String }
 *            {@code >}
 * 
 */
public void setBankMnemonic(JAXBElement<String> value) {
    this.bankMnemonic = ((JAXBElement<String>) value);
}

/**
 * Gets the value of the reserved property.
 * 
 * @return possible object is {@link JAXBElement }{@code <}{@link String }
 *         {@code >}
 * 
 */
public JAXBElement<String> getReserved() {
    return reserved;
}

/**
 * Sets the value of the reserved property.
 * 
 * @param value
 *            allowed object is {@link JAXBElement }{@code <}{@link String }
 *            {@code >}
 * 
 */
public void setReserved(JAXBElement<String> value) {
    this.reserved = ((JAXBElement<String>) value);
}

}

専門家のアドバイスを求めています。前もって感謝します。

4

1 に答える 1

2

WSDL を投稿していません。私が疑うのは<authId>minOccurs=0スキーマ定義に含まれていることです。トップダウン設計かボトムアップ設計かはわかりません。トップダウンを使用している場合はminOccurs=1、WSDL スキーマ定義セクションに追加するだけです。ボトムアップ設計アプローチを使用している場合は、Web サービス コードで以下の注釈を使用できます。

@XmlElement(nillable=true, required=true)
String authId;

このアノテーションには、metro 2.0 (JAXB 2.2) 以降が必要であることに注意してください。

コメントに基づいて編集:

JDK 7 にアップグレードできる場合は、JAX-WS 2.2 が含まれている必要があります。ただし、何らかの理由で JDK 全体をアップグレードできない場合は、こちらの手順に従って、およびファイルをアップグレードするだけで、承認済み標準オーバーライド メカニズムと呼ばれる機能を使用できます。jaxws-api.jarjaxb-api.jar

于 2013-03-11T14:32:33.287 に答える