我正在构建一个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的内容。
答案 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();
}
}