Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将参数指定为每个web服务调用的一部分?_Java_Spring_Jax Ws_Dry_Web Services - Fatal编程技术网

Java 如何将参数指定为每个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

目前,我们应用程序的每个web服务都有一个用户参数,该参数是为每个方法添加的。例如:

@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中为该操作设置一个 继承在这里没有帮助。