在Bluemix Server上发布端点

时间:2015-05-30 08:07:02

标签: java web-services jax-ws ibm-cloud

我正在尝试在Bluemix服务器上发布Web服务端点。当我尝试将方法称为:

text = []
i = 0
while True:
    if i > len(Y)-2:
        # No more possible |'s, so wrap things up
        text.append( Y[-1] )
        break
    if Y[i+1] == '|':
        # Add the items around the |; move past the group:
        if Y[i+2].endswith(','):
            Y[i+2] = Y[i+2].replace(",", "")
            text.append([Y[i], Y[i+2]])
        else:
            text.append([Y[i], Y[i+2]])
        i += 3
    else:
        # Add the current element & move on
        text.append( Y[i] )
        i += 1
for id in range(len(text)-1):
    if type(text[id]) != str:
        if text[id][-1] == text[id+1]:
            text.remove(text[id+1])

或者喜欢:

public class HelloWorldPublisher{

    public static void main(String[] args) {
        Endpoint.publish("http://myapp.eu-gb.mybluemix.net/ws/hello", new HelloWorldImpl());
    }
}

并尝试访问wsdl文档,我收到了public class HelloWorldPublisher{ public static void main(String[] args) { Endpoint.publish("/ws/hello", new HelloWorldImpl()); } }

顺便说一句,我关注this tutorial。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

发布网络服务时,您应使用http://<host>:<port>/<path>格式。

示例:

Endpoint.publish("http://localhost:80/ws/hello", new HelloWorldImpl());

但是,当您指定localhost时,您的网络服务可用的网络适配器不是很清楚。如果您的服务器具有LAN和无线网络适配器,那么您的服务可能仅在其中一个服务器上可用。

如果您知道该服务将在哪个网络地址上运行,那么您应该用特定的IP地址替换它。 或者,如果您指定0.0.0.0,它将在所有网络适配器上运行。

Endpoint.publish("http://0.0.0.0:80/ws/hello", new HelloWorldImpl());

我的建议是尝试使用&#34; 0.0.0.0&#34;地址,并仔细检查端口号。

修改

我看到这里有一个混乱的根源。所以这是一个更长的解释。 (如果没有必要,请跳过此处):

目前计算机有多个网络适配器。其中一些可以是虚拟的,一些是真实的物理连接。看,我有7个。 My network adapters

如今大多数网络应用程序都是基于TCP / IP的(例如FTP,HTTP,电子邮件......) TCP / IP应用程序需要IP地址和端口号来托管或连接到服务。 Web服务也不例外。您需要在IP地址和端口号上发布您的Web服务。

这是事情变得棘手的地方。您的计算机有多个网络适配器。 因此,您的计算机很可能有多个IP地址。如果您只是发布服务而未指定应使用哪个地址,那么您的网络服务可能只能通过一个特定的网络适配器使用。它可能是错误的。

出于这个原因,建议您准确指定要托管服务的地址。例如,如果您首选的局域网适配器具有固定的IP地址(例如192.168.1.20)然后您可以在http://192.168.1.20:80/ws/hello上发布您的服务。现在,您可以清楚地了解要启动服务的适配器。

问题是并非所有计算机都有固定的IP地址。所以,幸运的是,您还可以指定http://localhost:80/ws/hello 。在这种情况下,您的Web服务也可用于网络上的其他计算机。除了 !!!! ......这很重要!!!除非您的网络服务是在错误的网络适配器上启动的。你知道,因为你没有指定一个确切的IP地址你的计算机会选择一个或多个网络适配器。但它并不总是清楚哪一个。这可能是错误的。

所以,这会导致我们http://0.0.0.0:80/ws/hello 这是一个特殊的IP地址。这意味着将在所有可能的网络适配器上提供Web服务(请注意,IP地址应该与0.0.0.0完全相同。此处 将被真实IP替换。0.0.0.0是您需要使用的IP。它是一个特殊的地址。)

还有其他问题吗? :)

答案 1 :(得分:0)

仔细检查您是否正在激活Liberty Profile的server.xml文件中的JAX-WS功能。类似的东西:

   <featureManager>
        <feature>jsp-2.2</feature>
        <feature>jaxws-2.2</feature>
   </featureManager>

您可以签入Bluemix docs个不同的选项,将应用程序发布到Bluemix Liberty buildpack中。一个是使用应用程序推送配置文件,这是激活JAX-WS功能所需的。

希望它有所帮助,

CHEMI。