我不明白为什么我公开了Web服务方法,根据JAX-WS规范(根据我的理解)不应该这样。
我创建了一个带有隐式SEI的简单测试Web服务:
@WebService
@SOAPBinding(style = Style.RPC)
public interface TestServiceSEI
{
public String helloTest();
@WebMethod public String helloTest2();
}
目标是在WebService中公开helloTest()而不是,并在WebService中公开helloTest2()。然后我实现了这个SIB:
我特意省略endpointInterface参数来制作这个隐式SEI。我的理解是,使用隐式SEI,为了公开Web服务,我必须使用@WebMethod注释,任何未在隐式SEI中使用@WebMethod注释的方法都不应该在WebService中公开?
因此:
@WebService
public class TestServiceSIB implements TestServiceSEI
{
@Override
//this method should not be exposed?
public String helloTest()
{
return "HELLO WORLD";
}
//only this method should be exposed
@Override
public String helloTest2()
{
return "HELLO WEB SERVICE";
}
}
发布WebService时:
public static void main(String[] args)
{
Endpoint.publish("http://localhost:9876/ws", new TestServiceSIB());
}
尽管如此,我看到在WebService操作中公开了所有方法:
<operation name="helloTest">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="helloTest2">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
无论我尝试什么,我总是在WebService中显示所有方法,但根据JAX-WS规范方法仅在我试图避免的特定情况下暴露,但它们仍会暴露。我试图遵循规范并隐藏某些方法,但他们一直在显示。
有人可以解释为什么我不断暴露helloTest()吗?
感谢。
答案 0 :(得分:0)
您可以尝试注释您不想公开的公共方法 使用注释
@WebMethod(exclude=true)