Java 如何将参数指定为每个web服务调用的一部分?
目前,我们应用程序的每个web服务都有一个用户参数,该参数是为每个方法添加的。例如:Java 如何将参数指定为每个web服务调用的一部分?,java,spring,jax-ws,dry,web-services,Java,Spring,Jax Ws,Dry,Web Services,目前,我们应用程序的每个web服务都有一个用户参数,该参数是为每个方法添加的。例如: @WebService public interface FooWebService { @WebMethod public Foo getFoo(@WebParam(name="alwaysHere",header=true,partName="alwaysHere") String user, @WebParam(name="fooId") Long fooId); @WebMethod
@WebService
public interface FooWebService {
@WebMethod
public Foo getFoo(@WebParam(name="alwaysHere",header=true,partName="alwaysHere") String user, @WebParam(name="fooId") Long fooId);
@WebMethod
public Result deletetFoo(@WebParam(name="alwaysHere",header=true,partName="alwaysHere") String user, @WebParam(name="fooId") Long fooId);
// ...
}
一个服务中可能有二十个方法,每个方法的第一个参数都是user。可能有20个web服务
实际上,我们在实现中没有使用“用户”参数——事实上,我不知道它为什么会出现——但我没有参与设计,我希望放在那里的人是有原因的
不管怎样,我正试图把这个大泥球弄直
通过使用Spring代理包装web服务,我已经走了很长的路,它允许我在拦截器中进行前后处理,然后每个方法至少有20行复制粘贴的模板
我想知道是否有某种消息头可以应用于该方法或包,并且可以由某种类型的处理程序或每个web服务方法之外的其他方法访问
提前感谢您的建议,
LES希望用户消息绑定到谁或什么?您的web服务安全吗?这是某种身份验证头吗?这可能是最初的意图。事实上,应该有人能回答这些问题。找到谁。如果你发现你永远都不需要它,停止传递它。但是如果您需要它,我认为最好添加它,即使您现在不使用它,除非修改WSDL不是问题,尤其是在客户端
PS:我不知道如何避免在Java方法中添加一个@WebParamheader=true的参数,以便生成一个WSDL,其中操作的输入中有一个参数。好了,这就是JAX-WS从Java开始时的工作方式。希望用户消息绑定到谁或什么?您的web服务安全吗?这是某种身份验证头吗?这可能是最初的意图。事实上,应该有人能回答这些问题。找到谁。如果你发现你永远都不需要它,停止传递它。但是如果您需要它,我认为最好添加它,即使您现在不使用它,除非修改WSDL不是问题,尤其是在客户端
PS:我不知道如何避免在Java方法中添加一个@WebParamheader=true的参数,以便生成一个WSDL,其中操作的输入中有一个参数。好了,这就是JAX-WS从Java开始时的工作方式。如果没有理由需要将该变量作为参数,那么可以让每个服务扩展一个超类。在这个超类中,spring使用@Context注释或@Resource注释为JAXWS注入MessageContext、ServletContext、ServletRequest、HttpHeaders或任何合适的MessageContext
然后在该超类中提供一些方法,从请求中提取用户信息。如果没有理由需要将该变量作为参数,则可以让每个服务扩展一个超类。在这个超类中,spring使用@Context注释或@Resource注释为JAXWS注入MessageContext、ServletContext、ServletRequest、HttpHeaders或任何合适的MessageContext
然后在该超类中提供一些方法来从请求中提取用户信息。如果您正试图实现身份验证,则可以从预定义的处理程序(如协议或逻辑处理程序)中操纵上下文。例如,实现SOAPhandler,这是一个协议处理程序接口,从那里将该类添加到您提供的每个服务的处理程序链中。非常简单和强大。这位先生在这个话题上有最好的见解。如果身份验证是您试图实现的,那么您可以从预定义的处理程序(如协议或逻辑处理程序)操纵上下文。例如,实现SOAPhandler,这是一个协议处理程序接口,从那里将该类添加到您提供的每个服务的处理程序链中。非常简单和强大。这位先生在这个话题上有最好的见解。我认为它应该在将来用于身份验证,但目前,没有人用它做任何事情。这似乎不能简单地完成,这让我很恼火使用UsernameToken配置文件的WS-Security可能是实现这一点的简单方法,但是,您没有使用它,实际上,我不知道如何将它与Java-first方法结合使用。我认为它应该在将来用于身份验证,但目前,没有人使用它。这似乎不能简单地完成,这让我很恼火使用UsernameToken配置文件的WS-Security可能是实现这一点的简单方法,但是,您没有使用它,实际上,我不知道如何将它与Java-first方法结合使用。关键是在生成的WSDL中为该操作设置一个安全性。继承在这里没有帮助,关键是在生成的WSD中为该操作设置一个 继承在这里没有帮助。