显示比告诉更容易。这是从Apache提卡Web服务:Java Web服务只响应本地主机,而不是主机名(Apache Tika)
在该文件的89行,本地主机是硬编码:
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来访问它,而不是通过本地主机。
有没有一种地道的方式让Web服务响应所有可能的形式?
- 127.0.0.1(当本地访问)
- 本地主机(当本地访问)
- 主机名
- FQDN
- IP地址
- 不管我缺少
我想我可以在运行时计算和或多或少的完全枚举,但似乎有可能是更好的方法(?)。
您是否有直接调用JAXRS服务器的原因?只有它有一个非常简单易用的RESTful API ... – Gagravarr
这是* JAXRS服务器。但它只能通过本地主机地址访问。假设服务器在“Foo”机器上运行。我无法从机器“酒吧”中找到它。只有调用 - 使用'localhost'作为地址 - 由'Foo'制作的才能工作。 'Bar'不能调用'Foo','Foo'不能用'Foo'作为地址来调用它自己。它会失败。 'localhost'被硬编码到JAXRS服务器的代码中。你可以在第89行的我的pastebin链接中看到这个硬编码。 – rianjs
我向Apache提交了一个bug:https://issues.apache.org/jira/browse/TIKA-1196 – rianjs