gpt4 book ai didi

java - 引用自己的wsdl url

转载 作者:行者123 更新时间:2023-12-03 23:08:30 25 4
gpt4 key购买 nike

我正在构建一个 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,当然,可以在 localhost:8080/RegisterTest/RegisterTestService?wsdl 找到 wsdl。

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

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

最佳答案

未经测试,但应该非常接近您要查找的内容:

@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();
}
}

关于java - 引用自己的wsdl url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10505358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com