引用自己的wsdl url

时间:2012-05-08 19:42:40

标签: java web-services wsdl glassfish jax-ws

我正在构建一个Web服务,它应该通过将其wsdl URL发送到该服务器来在另一台服务器上注册。

我在Netbeans中构建了一个非常基本的Web服务,

@WebService
public class RegisterTest{
    @WebMethod(operationName = "emphasize")
    public String emphasize(@WebParam(name = "inputStr") String input){
        return input + "!!!";
    }
}

和Netbeans自动将我引导到localhost:8080 / RegisterTest / RegisterTestService?Tester,当然,wsdl可以在localhost:8080 / RegisterTest / RegisterTestService?wsdl找到。

我如何以编程方式获取此网址?

编辑: 我注意到,似乎存储此URL的唯一地方是glassfish服务器本身。 context-root似乎只能在glassfish / domain // config / domain.xml中找到。 有没有一种访问glassfish服务器API的好方法?我可以通过应用程序中的UI轻松获取端点地址> serviceName>查看端点,是否有编程方式这样做? 我已经尝试查看asadmin命令,但似乎找不到任何可以获取上下文根或端点URL的内容。

1 个答案:

答案 0 :(得分:0)

未经测试,但应该非常接近您正在寻找的内容:

@WebService
public class RegisterTest
{
    @Resource
    private WebServiceContext context;

    @WebMethod(operationName = "emphasize")
    public String emphasize(@WebParam(name = "inputStr") String input)
    {
        return input + "!!!";
    }

    @WebMethod(operationName = "getWsdlUrl")
    public String getWsdlUrl()
    {
        final ServletContext sContext = (ServletContext)
            this.context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
        final HttpServletRequest req = (HttpServletRequest)
            this.context.getMessageContext().get(MessageContext.SERVLET_REQUEST);
        final StringBuilder sb = new StringBuilder();

        sb.append(req.isSecure() ? "https" : "http");
        sb.append("://");
        sb.append(req.getLocalName());

        if ((req.isSecure() && req.getLocalPort() != 443) || 
            (!req.isSecure() && req.getLocalPort() != 80))
        {
            sb.append(":");
            sb.append(req.getLocalPort());          
        }

        sb.append(sContext.getContextPath());
        sb.append(RegisterTest.class.getSimpleName());
        sb.append("Service?wsdl");

        return sb.toString();
    }
}