Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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 从应用程序外部配置JAX-WS@WebServiceRef客户端_Java_Web Services_Weblogic_Jax Ws - Fatal编程技术网

Java 从应用程序外部配置JAX-WS@WebServiceRef客户端

Java 从应用程序外部配置JAX-WS@WebServiceRef客户端,java,web-services,weblogic,jax-ws,Java,Web Services,Weblogic,Jax Ws,我想从应用程序外部配置托管JAX-WS客户端(注入@webservicef),最好使用WebLogic管理控制台 例如,设置将在HTTP请求中发送的用户名和密码,以便在执行Web服务调用时在服务器上进行身份验证 需要明确的是,手动操作需要我来实现它,而使用容器提供的功能只需要配置 我可以使用SAP NetWeaver完成这项工作,是否可以使用WebLogic完成这项工作 @Stateless public class HolidayClientImpl { // I want this

我想从应用程序外部配置托管JAX-WS客户端(注入
@webservicef
,最好使用WebLogic管理控制台

例如,设置将在HTTP请求中发送的用户名和密码,以便在执行Web服务调用时在服务器上进行身份验证

需要明确的是,手动操作需要我来实现它,而使用容器提供的功能只需要配置

我可以使用SAP NetWeaver完成这项工作,是否可以使用WebLogic完成这项工作

@Stateless
public class HolidayClientImpl {

    // I want this dependency to be already configured, instead of doing it myself.
    @WebServiceRef
    private MyRemoteService myRemoteService;

}

在搜索了很多之后,我没有发现这个功能在WebLogic中可用。它不存在,至少在版本10.3.6和12也是如此

这意味着您必须实现客户机配置,如下所示:

MyPort port = service.getHTTPPort();
Map<String, Object> requestContext = ((BindingProvider) port).getRequestContext();

// URL
requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://www.remoteservice.com/service");

// Timeouts
requestContext.put(BindingProviderProperties.CONNECT_TIMEOUT, 5000);
requestContext.put(BindingProviderProperties.REQUEST_TIMEOUT, 30000);

// Authentication
requestContext.put(BindingProvider.USERNAME_PROPERTY, "user");
requestContext.put(BindingProvider.PASSWORD_PROPERTY, "password");
MyPort=service.getHTTPPort();
Map requestContext=((BindingProvider)端口).getRequestContext();
//网址
requestContext.put(BindingProvider.ENDPOINT\地址\属性,“http://www.remoteservice.com/service");
//超时
put(BindingProviderProperties.CONNECT\u超时,5000);
put(BindingProviderProperties.REQUEST\u超时,30000);
//认证
put(BindingProvider.USERNAME_属性,“用户”);
put(BindingProvider.PASSWORD_属性,“PASSWORD”);

在搜索了很多之后,我发现WebLogic中没有提供此功能。它不存在,至少在版本10.3.6和12也是如此

这意味着您必须实现客户机配置,如下所示:

MyPort port = service.getHTTPPort();
Map<String, Object> requestContext = ((BindingProvider) port).getRequestContext();

// URL
requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://www.remoteservice.com/service");

// Timeouts
requestContext.put(BindingProviderProperties.CONNECT_TIMEOUT, 5000);
requestContext.put(BindingProviderProperties.REQUEST_TIMEOUT, 30000);

// Authentication
requestContext.put(BindingProvider.USERNAME_PROPERTY, "user");
requestContext.put(BindingProvider.PASSWORD_PROPERTY, "password");
MyPort=service.getHTTPPort();
Map requestContext=((BindingProvider)端口).getRequestContext();
//网址
requestContext.put(BindingProvider.ENDPOINT\地址\属性,“http://www.remoteservice.com/service");
//超时
put(BindingProviderProperties.CONNECT\u超时,5000);
put(BindingProviderProperties.REQUEST\u超时,30000);
//认证
put(BindingProvider.USERNAME_属性,“用户”);
put(BindingProvider.PASSWORD_属性,“PASSWORD”);

这意味着您不能在不更改dev、test和prod的情况下在每个系统上使用相同的密码部署应用程序?@DavidLakatos No David,您可以将值(用户名、密码等)保存在应用程序外部的其他位置(数据库、属性文件等),并在不生成/部署的情况下更改这些值。我的代码有静态值,但这是一个代码简化,只是演示如何执行客户端配置。这里的要点是WebLogic没有为JAX-WS提供内部配置。通常我们将属性存储在数据库或XML文件中。您可以使用或不使用缓存,具体取决于您的场景。通常,将其保存在内存中是一个好主意,因为这些值不会经常更改。我的主要方法是在部署期间通过Weblogic部署计划更改某些应用程序属性,而无需更改代码或使用外部资源(如属性文件、数据库)。你认为这可行吗?@DavidLakatos我以前从未使用过这个功能。如果您能够在应用程序中使用自己绑定的自定义XML,那么这似乎是可行的,但我不确定它是否是为此而设计的。它似乎是JavaEE标准(JSR-88)。总有一天我会尝试一下,并了解一下。这意味着如果不在每个系统上使用相同的密码,就无法部署应用程序而不更改开发、测试和产品?@DavidLakatos No David,您可以将值(用户名、密码等)保存在应用程序之外的其他位置(数据库、属性文件等)并在没有构建/部署的情况下更改它们。我的代码有静态值,但这是一个代码简化,只是演示如何执行客户端配置。这里的要点是WebLogic没有为JAX-WS提供内部配置。通常我们将属性存储在数据库或XML文件中。您可以使用或不使用缓存,具体取决于您的场景。通常,将其保存在内存中是一个好主意,因为这些值不会经常更改。我的主要方法是在部署期间通过Weblogic部署计划更改某些应用程序属性,而无需更改代码或使用外部资源(如属性文件、数据库)。你认为这可行吗?@DavidLakatos我以前从未使用过这个功能。如果您能够在应用程序中使用自己绑定的自定义XML,那么这似乎是可行的,但我不确定它是否是为此而设计的。它似乎是JavaEE标准(JSR-88)。总有一天我会尝试一下,并了解它。