显示起来比说起来容易。这来自Apache Tika Web服务:
http://pastebin.com/jrCsVVtt
在该文件的第89行,localhost是硬编码的:
sf.setProviders(providers);
sf.setAddress("http://localhost:" + TikaServerCli.DEFAULT_PORT + "/");
BindingFactoryManager manager = sf.getBus().getExtension(
BindingFactoryManager.class);
这意味着,如果您正在本地计算机上运行Web服务,则无法通过
http://hostname:9998/tika
或http://hostname.domain.net:9998/tika
访问它。必须以http://localhost:9998/tika
身份访问。我的Java非常生锈,但是经过一番谷歌搜索之后,我添加了几行:
sf.setProviders(providers);
String hostname;
try
{
InetAddress ia = InetAddress.getLocalHost();
hostname = ia.getCanonicalHostName() + ":";
}
catch (Exception e)
{
//I'll do something else with this later
hostname = "http://localhost:";
}
sf.setAddress(hostname + TikaServerCli.DEFAULT_PORT + "/");
BindingFactoryManager manager = sf.getBus().getExtension(
BindingFactoryManager.class);
这使我可以通过主机名和FQDN访问它,但不能通过localhost访问它。
是否有一种惯用的方法来使Web服务以所有可能的形式进行响应?
127.0.0.1(在本地访问时)
本地主机(在本地访问时)
主机名
全称
IP地址
我想念的还有什么
我想我可以在运行时计算或多或少的完整枚举,但是似乎有更好的方法(?)。
最佳答案
我提交了一个补丁,其中添加了一个可选的命令行参数,并更改了默认行为以侦听所有有效的主机名和IP。 (是否会保留这种新的默认行为还有待观察。)
可以在Jira机票上找到更多详细信息以及补丁:
https://issues.apache.org/jira/browse/TIKA-1196
关于java - Java Web服务仅在localhost上响应,而不在主机名上响应(Apache Tika),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20008760/