服务调用函数的示例

服务调用有时也称为 Web Service 调用,是 IBM® Business Monitor 模型表达式中支持的众多 XPath 2.0 函数的其中一种。定义用于监控模型 XPath 表达式的服务调用 XPath 函数。

以下代码举例说明如何将服务调用用作用户定义的 XPath 函数:
public class Examples {
public static final String NAMESPACE = "http://www.jimbo.org/beverages/functions";

@XPathFunction(
namespaceName = NAMESPACE,
localName = "getCreditScore",
description = "(targetHost, port, ssNumber) This function returns the credit score of a person given his social security number. ",

isSelfContained = false,
isDeterministic = false
)
public static BigDecimal getCreditScore(final String targetHost, final String port, final String ssNumber) {
BigDecimal score = null;
try {
// Define the service.
QName serviceName = new QName("urn:CreditScore/mme/ibm/com", "CreditScoreService");
ServiceFactory factory = ServiceFactory.newInstance();
Service service = factory.createService(serviceName);

// Create the dynamic invocation object from this service.
Call call = service.createCall();
String url = "http://" + targetHost + ":" + port + "/CreditScoreService/services/port";
call.setTargetEndpointAddress(url);

// Build the message.
QName operationName = new QName("urn:CreditScoreService/mme/ibm/com", "getCreditScore");
call.setOperationName(operationName);
call.addParameter(
"ssNumber", // parameter name
XMLType.XSD_STRING, // parameter XML type QName
String.class, // parameter Java type class
ParameterMode.IN); // parameter mode
call.setReturnType(XMLType.XSD_STRING);
call.setProperty(Call.OPERATION_STYLE_PROPERTY, "wrapped");

// Invoke the operation.
Object[] actualArgs = {ssNumber};
String response = (String) call.invoke(actualArgs);
score = new BigDecimal (response);
}
catch (Throwable t) {
t.printStackTrace();
score = new BigDecimal (0);
}

return score;
}
}