3

我正在构建一个 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?

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

4

1 回答 1

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();
    }
}
于 2013-09-04T05:22:17.867 回答