本文将介绍如何编写一个简单的、基于控制台的Java SOAP客户机,以访问Open Calais Web服务。本教程所介绍的概念同样适用于为任何其它Web服务编写SOAP客户机。
目录
»
§ 运行原理
§ 前提条件
§ 使用Open Calais API构造和发送SOAP请求
§ 更多练习
§ 结束语
§ 参考资料
简介:Calais Web服务
根据 http://opencalais.mashery.com/Overview 的定义,Calais Web服务可以自动将富语义元数据附加到所提交的内容中,整个过程不会超过1秒钟。通过自然语言处理、机器学习和其它方法,Calais能够对文档进行分类并将它们与实体(人、位置、组织等)、事实(在‘y’公司工作的职员‘x’)和事件(职员‘z’于‘x’日被任命为‘y’公司的主席)相链接。元数据结果将集中保存,并以行业标准的RDF结构随全局唯一标识符(GUID)一并返回给用户。借助Calais GUID,任何下游用户都可以通过简单的Calais调用来获取该元数据。
通过该元数据,您可以建立文档与人、公司、地点、产品、事件以及地理等任何事物之间的链接映射(或者图表、网络)。您可以使用这些映射改善站点的导航,提供上下文联合,标记和组织内容,创建结构化的folksonomies,筛选并去除重复新闻资料或分析内容中是否包含您所关心的主题。此外,还可以与内容生态系统中的任何人共享这些映射。
运行原理
以编程人员的观点来看,您可以构建SOAP请求并将其发送给Web服务的远程端点。Web服务以 资源描述框架 的输出作为响应。
前提条件
NetBeans IDE(最好6.0以上)、Web和Java EE安装包
JDK 1.6.0 以上
了解RDF的基础知识
了解语义Web的基础知识
了解Web服务的基础知识
为Open Calais创建SOAP客户机
创建Java应用程序项目。在该项目中,创建一个Web服务客户机来使用Open Calais enlighten服务。
在新建项目向导中,创建一个Java应用程序项目。将其命名为contextualizer。接受所有的默认设置,然后创建一个Main类。
右键单击项目节点。这将弹出上下文菜单。
选择新建->Web服务客户机。
添加enlighten WSDL的URL:http://api.opencalais.com/enlighten/?wsdl。
现在代码将通过WSDL获取Web服务相关信息。
信息获取完成后,展开项目浏览器中“Web服务引用”节点。可以看到Web服务中可用的SOAP函数。
使用Open Calais API构造和发送SOAP请求
Open Calais API为SOAP 1.1和SOAP 1.2都提供了一个名称为”enlighten”的函数。我们将在客户机中使用SOAP 1.1函数。
单击左侧的"enlighten"节点,并将其拖拽到"contextualiser.Main"类中。以下代码将添加到主函数的已有类中:
try { // Call Web Service Operation
contextualiser.Calais service = new contextualiser.Calais();
contextualiser.CalaisSoap port = service.getCalaisSoap();
// TODO initialize WS operation arguments here
java.lang.String licenseID = "";
java.lang.String content = "";
java.lang.String paramsXML = "";
// TODO process result here
java.lang.String result = port.enlighten(licenseID, content, paramsXML);
System.out.println("Result = "+result);
} catch (Exception ex) {
// TODO handle custom exceptions here
}
要了解调用API的各种参数,请参阅Open Calais API指南。
特别地,我们必须通过SOAP请求发送以下信息:
许可ID,或开发人员密钥(注册Open Calais网站获得)
希望获取的语义元数据文本
ParamsXML:预定义XML格式的字符串
使用"water"作为文本。ParamsXML就是Open Calais API文档中说明的那个。 现在,源代码应如下所示:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package contextualiser;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
/**
*
* @author amit
*/
public class
Main
{
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
try { // Call Web Service Operation
contextualiser.Calais service = new contextualiser.Calais();
contextualiser.CalaisSoap port = service.getCalaisSoap();
// TODO initialize WS operation arguments here
java.lang.String licenseID = "1234567890134"; //replace this with your own license key
java.lang.String content = "water";
java.lang.String paramsXML="";
String line;
try{
FileReader input = new FileReader("paramsXML.xml");
BufferedReader bufRead = new BufferedReader(input);
while((line=bufRead.readLine())!=null){
paramsXML+= line;
System.out.println(line);
}
}catch(IOException e){
System.out.println(e);
}
// TODO process result here
java.lang.String result = port.enlighten(licenseID, content, paramsXML);
System.out.println("Result = "+result);
} catch (Exception ex) {
// TODO handle custom exceptions here
}
}
}