【发布时间】:2012-12-03 12:31:08
【问题描述】:
我编写了以下 Apex 类作为自定义 Web 服务套件的一部分。所有人都有同样的问题,但这是最简单的例子;如果我能解决这个问题,我可以为其他网络服务解决它。
global class WebServiceA4S {
global class returngetEnquiries {
public String status {get;set;}
public String error {get;set;}
public List<Enquiry__c> results {get;set;}
}
Webservice static returngetEnquiries getEnquiries() {
returngetEnquiries rtnError = new returngetEnquiries();
rtnError.status='success';
rtnError.error = '';
rtnError.results = new List<Enquiry__c>();
// id en name
try {
list<Enquiry__c> tmp = [Select id,name From Enquiry__c];
rtnError.results = tmp;
}
catch(Exception e) {
rtnError.status='error';
rtnError.error = String.valueof(e);
}
return rtnError;
}
}
现在,如果我调试返回的 rtnError,就在“返回 rtnError”之前,它确实显示了一个查询列表,因此代码可以正常工作。 问题是,如果我调用 Web 服务(通过 PHP 或 SOAPUI),结果是空的。 我使用课程中的 wsdl,当然是由 salesforce 创建的。
我还查看了 wsdl,它看起来像这样:
...
<xsd:complexType name="returngetEnquiries">
<xsd:sequence/>
</xsd:complexType>
<xsd:element name="getEnquiries">
<xsd:complexType>
<xsd:sequence/>
</xsd:complexType>
</xsd:element>
<xsd:element name="getEnquiriesResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="result" type="tns:returngetEnquiries" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
...
看起来 returngetEnquiries 没有定义。我尝试编辑它并添加类中定义的字段,但这没有帮助。
【问题讨论】:
-
我没有看到任何立即弹出的错误...但是您真的必须捕获这样的错误吗(尽管 SELECT 很少会抛出任何错误)?如果你留下简单的
return [SELECT...];,抛出的异常会冒泡并返回给你的 XML 响应,你这边的 SOAP 库也应该在 PHP 中解释和转换异常......就像php.net/manual/en/soapserver.fault.php的结果一样 -
你抛出错误是绝对正确的。但是,这样做是为了准备在那里构建更多逻辑。但首先我想得到 一些 结果。
标签: soap salesforce