我使用基于Magento WSDL(http://host/api?wsdl)的wsdl2java生成了java代码,但不能使用params调用任何过程
环境:
> JDK 1.8
> AXIS 1.4
> PHP 5.6
> Magento 1.6
问题:
例如,product.info api方法需要2个参数:sessionId和productId
码:
MagentoService magentoService = new MagentoServiceLocator();
Mage_Api_Model_Server_HandlerBindingStub service = new Mage_Api_Model_Server_HandlerBindingStub(new URL("http://myhost/api"),magentoService);
String sessionId = service.login("api-user","AAAAAAAAAAAAAAAA");
Call serviceCall = service.createCall();
serviceCall.setOperationName(new QName("call"));
serviceCall.setTargetEndpointAddress(new URL("http://myhost/api"));
serviceCall.addParameter("sessionId",Constants.XSD_STRING,ParameterMode.IN);
serviceCall.addParameter("resourcePath",ParameterMode.IN);
serviceCall.addParameter("productId",ParameterMode.IN);
serviceCall.setReturnType(Constants.SOAP_MAP);
serviceCall.invoke("call",new Object[] {sessionId,"product.info",new Object[]{2115}});
我查了数据库,产品确实存在.无论使用哪个ID,我都会收到错误:
AxisFault
faultCode: 101
faultString: Product not exists.
我尝试了另一种api方法,比如customer.info并且具有相同的结果.
如何正确传递参数?
我做了什么:
> disable wsdl cache on server side
> clean wsdl cache
>重新启动Web服务
最佳答案
Magento文档有一个错误:
http://www.magentocommerce.com/api/soap/catalog/catalogProduct/catalog_product.info.html
参数“productId”应替换为“product”.