2016-03-15 51 views
0

註解的方法:WSGEN暴露我有以下的最低Web服務定義不與@WebMethod

import javax.jws.WebMethod; 
import javax.jws.WebService; 
import javax.xml.ws.Endpoint; 

@WebService 
public class DummyWS { 

    public static void main(String[] args) { 
    final String url= "http://localhost:8888/Dummy"; 
    final Endpoint endpoint= Endpoint.create(new DummyWS()); 
    endpoint.publish(url); 
    } 

    @WebMethod 
    public void putData(final String value) { 
    System.out.println("value: "+value); 
    } 

    @WebMethod 
    public void doSomething() { 
    System.out.println("doing nothing"); 
    } 


    public void myInternalMethod() { 
    System.out.println("should not be exposed via WSDL"); 
    } 
} 

正如你可以看到我有兩個方法我要揭露,因爲它們與@WebMethod註釋:putDatadoSomething。 但是當運行wsgen時,它會生成一個WSDL,其中包含myInternalMethod,儘管它的註釋是而不是

我在這裏有一個配置錯誤嗎?爲什麼暴露的方法沒有用@WebMethod註釋?

回答

0

好的,我找到了。默認全部公開方法暴露。要排除方法,必須用@WebMethod(exclude=true)對其進行標註。 這是一個相當奇怪的要求,因爲這意味着我只需要用@WebMethod註釋那些方法,我做而不是想要公開。

這是正確的代碼,然後:

import javax.jws.WebMethod; 
import javax.jws.WebService; 
import javax.xml.ws.Endpoint; 

@WebService 
public class DummyWS { 

    public static void main(String[] args) { 
    final String url= "http://localhost:8888/Dummy"; 
    final Endpoint endpoint= Endpoint.create(new DummyWS()); 
    endpoint.publish(url); 
    } 

    public void putData(final String value) { 
    System.out.println("value: "+value); 
    } 

    public void doSomething() { 
    System.out.println("doing nothing"); 
    } 


    @WebMethod(exclude=true) 
    public void myInternalMethod() { 
    System.out.println("should not be exposed via WSDL"); 
    } 
} 
相關問題