在 Spring Boot 3 中使用 JaxWsPortProxyFactoryBean 或等效项?

问题描述 投票:0回答:2

我正在尝试将一个在 Spring Boot 2.7.5 中使用

org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean
的项目升级到 Spring Boot 3。这是我的 bean 的声明:

@Bean
public JaxWsPortProxyFactoryBean myJaxWsClient() {
    JaxWsPortProxyFactoryBean jaxWsPortProxyFactoryBean = new JaxWsPortProxyFactoryBean();
    jaxWsPortProxyFactoryBean.setJaxWsService(new My_Service());
    jaxWsPortProxyFactoryBean.setWsdlDocumentUrl(Thread.currentThread().getContextClassLoader().getResource("META-INF/my.wsdl"));
    jaxWsPortProxyFactoryBean.setNamespaceUri("urn:net:something");
    jaxWsPortProxyFactoryBean.setServiceName("MyService");
    jaxWsPortProxyFactoryBean.setServiceInterface(My.class);
    jaxWsPortProxyFactoryBean.setEndpointAddress("http://someuri:7979/myservice");
    jaxWsPortProxyFactoryBean.setUsername("username");
    jaxWsPortProxyFactoryBean.setPassword("password");
    return jaxWsPortProxyFactoryBean;
}

但是,

org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean
在Spring Boot 3中似乎不可用,或者已经转移到另一个库了。

我的问题是:如何在 Spring Boot 3 中使用

JaxWsPortProxyFactoryBean
,或者如何迁移到更现代的替代方案(如果可用)?

java spring spring-boot soap jax-ws
2个回答
3
投票

该类与许多其他类一样,已在 Spring Framework 6 中删除(Spring Boot 3 使用该类)。它已由此 Github 票证 和此 commit 记录。旧式远程处理支持(由于存在漏洞和可用的更好选项)已从核心库中删除。

对于 JAX-WS 部分,您可能希望在当今时代使用类似 Apache CXF 的东西,这将允许动态代理。另一种选择是使用 Spring Web Services

自己实现客户端

0
投票

JAXWS-RI 也是一个选项:您使用 jaxws-maven-plugin 生成 MyService 和 MyPort。然后使用 Spring 进行设置:

@Bean
public MyService myService() {
    try {
        URL wsdlLocation = this.getClass().getResource("/META-INF/wsdl/my.wsdl");
        return new MyService(wsdlLocation); // may pass features here
    } catch (Exception e) {
        throw(new IllegalStateException(e);
    }
}

在您的客户端实现中,假设您编写了一个 MyConfigProperties 类来访问 application.properties:

public MyClient(MyService myService, MyConfigProperties props) {
  this.myPort = myService.getMyPort();
  this.props = props;
}

public MyResult callEndpoint() {    
  BindingProvider bindingProvider = (BindingProvider) msgBoxPort;
  Map<String, Object> requestContext = bindingProvider.getRequestContext();
  requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, props.getWebserviceUri());
  // requestContext.put(JAXWSProperties.SSL_SOCKET_FACTORY, sslSocketFactory);
  return myPort.callEndpoint();
 }
© www.soinside.com 2019 - 2024. All rights reserved.