2012-05-08 38 views
3

我正在構建一個Web服務,該服務應該通過向其服務器發送它的wsdl URL來在另一個服務器上註冊。引用自己的wsdl網址

我建在Netbeans的一個非常基本的web服務,

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

和Netbeans自動將我爲localhost:8080/RegisterTest/RegisterTestService測試儀,和自然的WSDL可以在本地主機中找到:8080/RegisterTest/RegisterTestService?WSDL。

如何以編程方式獲取此URL?

編輯: 我注意到,似乎存儲此URL的唯一地方是glassfish服務器本身。上下文根似乎只能在glassfish/domain // config/domain.xml中找到。 有沒有一種訪問glassfish服務器API的好方法?我可以通過應用程序> serviceName> View Endpoint中的用戶界面輕鬆獲取終端地址,是否有編程方式來執行此操作? 我試着通過asadmin命令查找,但似乎無法找到任何獲取上下文根或端點URL的任何內容。

+0

你有沒有發現任何以編程方式獲得url最後? – LB40

回答

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