2012-05-08 14 views
3

私は、そのサーバーにwsdl URLを送信して別のサーバーに登録する予定のWebサービスを構築しています。自分自身への参照wsdl url

私は

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

、NetBeansで非常に基本的なWebサービスを構築し、NetBeansは自動的にローカルホストに私を指示します?8080/RegisterTest/RegisterTestServiceテスター、そして自然に、WSDLがローカルホストで発見することができます:8080/RegisterTest/RegisterTestService?wsdl。

プログラムでこのURLを取得するにはどうすればよいですか?

編集: このURLを格納していると思われる場所は、glassfishサーバーそのものだけです。 context-rootは、glassfish/domain/config/domain.xmlにしかないようです。 GlassfishサーバーAPIにアクセスするには良い方法がありますか?アプリケーション>サービス名>ビューエンドポイントのUIでエンドポイントアドレスを簡単に取得できますが、これを行うためのプログラム的な方法はありますか? 私は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(); 
    } 
} 
関連する問題