2012-09-03 14 views
6


Estoy tratando de crear un cliente de servicio web utilizando Visual Studio 2010. El cliente funciona muy bien si uso el archivo wsdl en la versión SOAP V2.
Cuando configuro la propiedad WS-I Compliance en Yes en Magento y vuelvo a compilar el cliente del servicio web en VS2010, ¡no funciona! Algunos métodos desaparecen del archivo WSDL resultante.
Generar un cliente de servicio web en el modo de cumplimiento WS-I

He encontrado el mismo problema si genero un cliente de servicio web de Java usando la herramienta wsimport.
¿Alguna idea de lo que está pasando?

Respuesta

2

Hay un error en el código original de Magento Core, relacionado con la operación "catalogProductAttributeRemove" (núcleo del módulo/Mage/Catalog).

Para resolverlo, he comentado la siguiente operación en el archivo wsi.xml del catálogo de módulos

<!--wsdl:operation name="catalogProductAttributeRemove"> 
    <wsdl:documentation>Delete attribute</wsdl:documentation> 
    <wsdl:input message="typens:catalogProductAttributeRemoveRequest" /> 
    <wsdl:output message="typens:catalogProductAttributeRemoveResponse" /> 
</wsdl:operation--> 

Después de que el edificio automática de un cliente de servicios Web utilizando VS2010 funciona perfectamente !.

4

Me encontré con el mismo problema y en lugar de comentar el catálogoProductAttributeRemove, de hecho miré en lo que faltaba y agregué las secciones adicionales a mi archivo wsi.xml. Gracias a Juanma R. por señalarme en la dirección del archivo que debía corregirse.

Hice referencia a las entradas de catalogProductAttributeCreate como un punto de referencia para lo que otras secciones podrían necesitar para solucionar esto. Realmente no sé nada sobre WSDL, solo intenté buscar qué podría faltar.

Después de cambiar el archivo, actualicé todas las memorias caché en Magento y confirmé que las nuevas entradas aparecían en el archivo WSDL en /index.php/api/v2_soap?wsdl=1. Luego eliminé la referencia web que se agregó a VS 2010 y seguí los pasos para volver a agregar la referencia web. Esta vez, después de agregarlo, no obtuve errores.

La versión de Magento que estaba parcheando es Magento Enterprise 1.12.0.2 pero espero que sea aplicable a otras versiones que muestren este mismo error con catalogProductAttributeRemove.

Aquí es un diff rápida me encontré de lo que he cambiado en el archivo wsi.xml:

*** Z:\mage-1-12-0-2.dev\htdocs\app\code\core\Mage\Catalog\etc\wsi - Copy.xml backup Tue Jul 3 12:08:31 2012 UTC 
--- Z:\mage-1-12-0-2.dev\htdocs\app\code\core\Mage\Catalog\etc\wsi.xml Fri Nov 9 18:40:58 2012 UTC 
*************** 
*** 1509,1520 **** 
        <xsd:complexType> 
         <xsd:sequence> 
          <xsd:element minOccurs="1" maxOccurs="1" name="result" type="xsd:string" /> 
         </xsd:sequence> 
        </xsd:complexType> 
       </xsd:element> 
      </xsd:schema> 
     </wsdl:types> 
     <wsdl:message name="catalogProductCurrentStoreRequest"> 
      <wsdl:part name="parameters" element="typens:catalogProductCurrentStoreRequestParam" /> 
     </wsdl:message> 
     <wsdl:message name="catalogProductCurrentStoreResponse"> 
--- 1509,1540 ---- 
        <xsd:complexType> 
         <xsd:sequence> 
          <xsd:element minOccurs="1" maxOccurs="1" name="result" type="xsd:string" /> 
         </xsd:sequence> 
        </xsd:complexType> 
       </xsd:element> 
+ 
+   
+ <!-- Added by Matt Johnson 2012-11-09 to fix VS 2010 support of SOAP reference --> 
+   <xsd:element name="catalogProductAttributeRemoveRequestParam"> 
+    <xsd:complexType> 
+     <xsd:sequence> 
+      <xsd:element minOccurs="1" maxOccurs="1" name="sessionId" type="xsd:string" /> 
+      <xsd:element minOccurs="1" maxOccurs="1" name="attribute" type="xsd:string" /> 
+     </xsd:sequence> 
+    </xsd:complexType> 
+   </xsd:element> 
+   <xsd:element name="catalogProductAttributeRemoveResponseParam"> 
+    <xsd:complexType> 
+     <xsd:sequence> 
+      <xsd:element minOccurs="1" maxOccurs="1" name="result" type="xsd:boolean" /> 
+     </xsd:sequence> 
+    </xsd:complexType> 
+   </xsd:element> 
+   
+   
      </xsd:schema> 
     </wsdl:types> 
     <wsdl:message name="catalogProductCurrentStoreRequest"> 
      <wsdl:part name="parameters" element="typens:catalogProductCurrentStoreRequestParam" /> 
     </wsdl:message> 
     <wsdl:message name="catalogProductCurrentStoreResponse"> 
*************** 
*** 1883,1894 **** 
     <wsdl:message name="catalogProductAttributeCreateRequest"> 
      <wsdl:part name="parameters" element="typens:catalogProductAttributeCreateRequestParam" /> 
     </wsdl:message> 
     <wsdl:message name="catalogProductAttributeCreateResponse"> 
      <wsdl:part name="parameters" element="typens:catalogProductAttributeCreateResponseParam" /> 
     </wsdl:message> 
     <wsdl:portType name="{{var wsdl.handler}}PortType"> 
      <wsdl:operation name="catalogCategoryCurrentStore"> 
       <wsdl:documentation>Set_Get current store view</wsdl:documentation> 
       <wsdl:input message="typens:catalogCategoryCurrentStoreRequest" /> 
       <wsdl:output message="typens:catalogCategoryCurrentStoreResponse" /> 
      </wsdl:operation> 
--- 1903,1923 ---- 
     <wsdl:message name="catalogProductAttributeCreateRequest"> 
      <wsdl:part name="parameters" element="typens:catalogProductAttributeCreateRequestParam" /> 
     </wsdl:message> 
     <wsdl:message name="catalogProductAttributeCreateResponse"> 
      <wsdl:part name="parameters" element="typens:catalogProductAttributeCreateResponseParam" /> 
     </wsdl:message> 
+ 
+ <!-- Added by Matt Johnson 2012-11-09 to fix VS 2010 support of SOAP reference --> 
+ <wsdl:message name="catalogProductAttributeRemoveRequest"> 
+  <wsdl:part name="parameters" element="typens:catalogProductAttributeRemoveRequestParam" /> 
+ </wsdl:message> 
+ <wsdl:message name="catalogProductAttributeRemoveResponse"> 
+  <wsdl:part name="parameters" element="typens:catalogProductAttributeRemoveResponseParam" /> 
+ </wsdl:message> 
+ 
     <wsdl:portType name="{{var wsdl.handler}}PortType"> 
      <wsdl:operation name="catalogCategoryCurrentStore"> 
       <wsdl:documentation>Set_Get current store view</wsdl:documentation> 
       <wsdl:input message="typens:catalogCategoryCurrentStoreRequest" /> 
       <wsdl:output message="typens:catalogCategoryCurrentStoreResponse" /> 
      </wsdl:operation> 
*************** 
*** 2760,2771 **** 
        <soap:body use="literal" /> 
       </wsdl:input> 
       <wsdl:output> 
        <soap:body use="literal" /> 
       </wsdl:output> 
      </wsdl:operation> 
     </wsdl:binding> 
     <wsdl:service name="{{var wsdl.name}}Service"> 
      <wsdl:port name="{{var wsdl.handler}}Port" binding="typens:{{var wsdl.handler}}Binding"> 
       <soap:address location="{{var wsdl.url}}" /> 
      </wsdl:port> 
     </wsdl:service> 
--- 2789,2814 ---- 
        <soap:body use="literal" /> 
       </wsdl:input> 
       <wsdl:output> 
        <soap:body use="literal" /> 
       </wsdl:output> 
      </wsdl:operation> 
+ 
+ 
+ <!-- Added by Matt Johnson 2012-11-09 to fix VS 2010 support of SOAP reference -->   
+  <wsdl:operation name="catalogProductAttributeRemove"> 
+   <soap:operation soapAction="" /> 
+   <wsdl:input> 
+    <soap:body use="literal" /> 
+   </wsdl:input> 
+   <wsdl:output> 
+    <soap:body use="literal" /> 
+   </wsdl:output> 
+  </wsdl:operation> 
+  
+  
     </wsdl:binding> 
     <wsdl:service name="{{var wsdl.name}}Service"> 
      <wsdl:port name="{{var wsdl.handler}}Port" binding="typens:{{var wsdl.handler}}Binding"> 
       <soap:address location="{{var wsdl.url}}" /> 
      </wsdl:port> 
     </wsdl:service> 
2

que incluía el diff en el wsi.xml partir de la versión 1.7.2 y subido que here.

Por lo tanto, si no puede leer la diferencia correcta, puede usar este archivo directamente.

Cuestiones relacionadas