我正在开发基于 Spring-WS 的合同优先 Web 服务。我依赖于 Castor 编组,我遇到了以下问题。
当在 Envelope 标记中定义“xmlns”命名空间时,请求被接受,例如:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns="http://www.mycompany.com/MyService/schemas">
<soap:Header/>
<soap:Body>
<doPlaceHoldRequest>
<hold>
<accountInfo>
<accountNumber>123456789</accountNumber>
</accountInfo>
<extended>false</extended>
<afterHours>false</afterHours>
<amountSavings>1.00</amountSavings>
<amountChecking>0.00</amountChecking>
</hold>
</doPlaceHoldRequest>
</soap:Body>
</soap:Envelope>
但是,从 Spring-WS 提供的 .wsdl(从 XSD 生成)生成的 .NET 和 Java 客户端都以下列方式形成它们的请求:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header/>
<soap:Body>
<doPlaceHoldRequest
xmlns="http://www.mycompany.com/MyService/schemas">
<hold>
<accountInfo>
<accountNumber>123456789</accountNumber>
</accountInfo>
<extended>false</extended>
<afterHours>false</afterHours>
<amountSavings>1.00</amountSavings>
<amountChecking>0.00</amountChecking>
</hold>
</doPlaceHoldRequest>
</soap:Body>
</soap:Envelope>
这会导致 Castor 抛出 Unmarshalling Exception。如何让 Castor 将这些消息识别为有效?我的 WSDL(或我用来自动生成它的 XSD)可能是错误的吗?