У меня проблема с отправкой запроса WS на сервер.Похоже, что Пространство имен (NS) в одном из ComplexTypes типов операций вызывает выброс xsi:type
как часть сгенерированного запроса SOAP.
Ниже приведен пример WSDL:
<xs:complexType name="SubscribeAppendantProductRequest"><br>
<xs:complexContent><br>
<xs:extension base="business:Common"><br>
<xs:sequence><br>
<xs:element maxOccurs="unbounded" name="Product"><br>
<xs:complexType><br>
<xs:complexContent><br>
<xs:extension base="business:Product"><br>
<xs:sequence><br>
<xs:element maxOccurs="unbounded" minOccurs="0" name="Service" type="business:Service" /><br>
<xs:element minOccurs="0" name="EffectiveDate" type="xs:string" /><br>
<xs:element minOccurs="0" name="ExpireDate" type="xs:string" /><br>
<xs:element name="ValidMode" type="business:ValidMode" /><br>
</xs:sequence><br>
</xs:extension><br>
</xs:complexContent><br>
</xs:complexType><br>
</xs:element><br>
<xs:element minOccurs="0" name="HandlingChargeFlag" type="xs:int" /><br>
<xs:element minOccurs="0" name="CustID" type="xs:string" /><br>
</xs:sequence><br>
</xs:extension><br>
</xs:complexContent><br>
</xs:complexType>
См. Ниже код, генерирующий запрос на операцию / заглушку Axis2:
SubscribeAppendantProductRequest sub_req = new SubscribeAppendantProductRequest();<br>
Product_type2 subscribedToProduct = new Product_type2();<br>
subscribedToProduct.setId(productKey);<br>
subscribedToProduct.setValidMode(ValidMode.value1);<br>
Product_type2 []subscribedProductList = new Product_type2[1];<br>
subscribedProductList[0]=subscribedToProduct;<br>
sub_req.addProduct(subscribedToProduct);<br>
sub_req.setProduct(subscribedProductList);<br>
sub_req.setSubscriberNo(subscriber);<br>
return sub_req;
Каждый раз, когда я отправляю запрос, яполучите следующее сообщение об ошибке:
Ошибка параметра интерфейса: имеется 1 ошибка проверки XML: недопустимый xsi: введите qname: 'ns2: Product_type2' в элементе SubscribeAppendantProductRequest
См.ниже для сгенерированного запроса SOAP:
<?xml version='1.0' encoding='UTF-8'?><br>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><br>
<soapenv:Body><br>
<ns3:SubscribeAppendantProductRequestMsg xmlns:ns3="http://www.huawei.com/bme/cbsinterface/cbs/businessmgrmsg"><br>
<RequestHeader><br>
<ns1:CommandId xmlns:ns1="http://www.huawei.com/bme/cbsinterface/common">SubscribeAppendantProduct</ns1:CommandId><br>
<ns1:Version xmlns:ns1="http://www.huawei.com/bme/cbsinterface/common">1.0</ns1:Version><br>
<ns1:TransactionId xmlns:ns1="http://www.huawei.com/bme/cbsinterface/common">trans001</ns1:TransactionId><br>
<ns1:SequenceId xmlns:ns1="http://www.huawei.com/bme/cbsinterface/common">2002396871686</ns1:SequenceId><br>
<ns1:RequestType xmlns:ns1="http://www.huawei.com/bme/cbsinterface/common">Event</ns1:RequestType><br>
<ns1:SerialNo xmlns:ns1="http://www.huawei.com/bme/cbsinterface/common">2002396871686</ns1:SerialNo><br>
</RequestHeader><br>
<SubscribeAppendantProductRequest xmlns:ns2="http://www.huawei.com/bme/cbsinterface/cbs/businessmgr" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:SubscribeAppendantProductRequest"><br>
<ns2:SubscriberNo>8090547759</ns2:SubscriberNo><br>
<ns2:Product xsi:type="ns2:Product_type2"><br>
<ns2:Id>121390</ns2:Id><br>
<ns2:ValidMode>4050000</ns2:ValidMode><br>
</ns2:Product><br>
</SubscribeAppendantProductRequest><br>
</ns3:SubscribeAppendantProductRequestMsg><br>
</soapenv:Body><br>
</soapenv:Envelope>
Я полагаю, что проблема связана с базовым расширением сложного типа Product.
Как ни странно, я запустил аналогичную программу для другого типа операции с похожими характеристиками, которая работала нормально.Ниже приведен пример функциональной операции WSDL:
<xs:complexType name="UnSubscribeAppendantProductRequest"><br>
<xs:complexContent><br>
<xs:extension base="business:Common"><br>
<xs:sequence><br>
<xs:element maxOccurs="unbounded" name="Product"><br>
<xs:complexType><br>
<xs:sequence><br>
<xs:element name="ProductID" type="xs:string" /><br>
<xs:element minOccurs="0" name="ProductOrderKey" type="xs:string" /><br>
<xs:element name="ValidMode" type="xs:string" /><br>
<xs:element minOccurs="0" name="ExpireDate" type="xs:string" /><br>
<xs:element maxOccurs="unbounded" minOccurs="0" name="Service"><br>
<xs:complexType><br>
<xs:sequence><br>
<xs:element name="Id" type="xs:string" /><br>
<xs:element maxOccurs="unbounded" name="SimpleProperty" type="business:SimpleProperty" /><br>
</xs:sequence><br>
</xs:complexType><br>
</xs:element><br>
</xs:sequence><br>
</xs:complexType><br>
</xs:element><br>
<xs:element minOccurs="0" name="CustID" type="xs:string" /><br>
</xs:sequence><br>
</xs:extension><br>
</xs:complexContent><br>
</xs:complexType>
Когда я проводил сравнение, кажется, что они оба используют Product
сложный тип, но кажется, что неисправный использует Product
сложный тип как расширение.
У кого-нибудь есть опыт работы с этим?Любые возможные решения?Если бы я использовал другую привязку данных (от ADB), все было бы иначе?