Java 带有spring boot&;的soap服务;来自现有wsdl的mtom

Java 带有spring boot&;的soap服务;来自现有wsdl的mtom,java,spring-boot,wsdl,spring-ws,mtom,Java,Spring Boot,Wsdl,Spring Ws,Mtom,在这个例子()之后,我尝试使用springboot2.2.0.RELEASE从现有的WSDL开始创建一个SOAP服务 关键是在输出类中有一个字段必须通过MTOM发送,我无法让它正常工作。以下摘录自我的代码,返回一个响应,字段中带有base64 //配置bean类 @使能 @配置 公共类WebServiceConfig扩展了WsConfigurerAdapter{ @豆子 public ServletRegistrationBean messageDispatcherServlet(Applica

在这个例子()之后,我尝试使用
springboot2.2.0.RELEASE从现有的
WSDL
开始创建一个
SOAP
服务

关键是在输出类中有一个字段必须通过
MTOM
发送,我无法让它正常工作。以下摘录自我的代码,返回一个响应,字段
中带有
base64

//配置bean类
@使能
@配置
公共类WebServiceConfig扩展了WsConfigurerAdapter{
@豆子
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext ApplicationContext){
MessageDispatcherServlet servlet=new MessageDispatcherServlet();
setApplicationContext(applicationContext);
返回新的ServletRegistrationBean(servlet,“/ServiceWS/*”);
}
@Bean(name=“DeliveryService”)
公共Wsdl11Definition默认Wsdl11Definition(){
返回新的SimpleWSDL11定义(新的类路径资源(“/wsdl/DeliveryService.wsdl”);
}
//其他东西
}
//端点类
@端点
公共类DeliverDocumentEndpoint{
@PayloadRoot(命名空间=”http://pb.com/service/ws/delivery,localPart=“DeliverDocument”)
@回应书
public DeliverDocumentResponse deliverDocument(@RequestPayload deliverDocument request)抛出DeliveryFault{
//与MTOM合作
}
}
//字段int输出bean,通过代码生成
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name=“ComposedDocument”,propOrder={“data”})
公共类复合文档{
@XmlElement(必需=true)
@XmlMimeType(“应用程序/八位字节流”)
受保护的数据处理器数据;
//接二连三
}
我在网上找到了一个示例()并向我的解决方案中添加了另一个
@Configuration
bean

@EnableWs
@配置
公共类MtomServerConfiguration扩展了WsConfigurationSupport{
@豆子
@凌驾
公共DefaultMethodEndpointAdapter DefaultMethodEndpointAdapter(){
List ArgumentResolver=新建ArrayList();
ArgumentResolver.add(methodProcessor());
List returnValueHandlers=new ArrayList();
添加(methodProcessor());
DefaultMethodEndpointAdapter=新的DefaultMethodEndpointAdapter();
adapter.setMethodArgumentResolver(ArgumentResolver);
setMethodReturnValueHandlers(returnValueHandlers);
返回适配器;
}
@豆子
公共编组PayloadMethodProcessor方法处理器(){
返回新的MarshallingPayloadMethodProcessor(marshaller());
}
@豆子
公共Jaxb2Marshaller-marshaller(){
Jaxb2Marshaller-marshaller=新的Jaxb2Marshaller();
setContextPath(“com.pb.service.ws.model”);
marshaller.setMtomEnabled(true);
返回编组员;
}
}
然而,通过这种方法,我得到了一个错误:


<SOAP-ENV:Fault>
    <faultcode>SOAP-ENV:Server</faultcode>
    <faultstring xml:lang="en">
        No adapter for endpoint 
        [public com.pb.service.ws.delivery.DeliverDocumentResponse it.m2sc.ws.endpoint.DeliverDocumentEndpoint.deliverDocument(com.pb.service.ws.delivery.DeliverDocument) 
        throws com.pb.service.ws.delivery.DeliveryFault]: 
        Is your endpoint annotated with @Endpoint, or does it implement a supported interface like MessageHandler or PayloadEndpoint?
    </faultstring>
</SOAP-ENV:Fault>

SOAP-ENV:服务器
端点没有适配器
[public com.pb.service.ws.delivery.DeliverDocumentResponse it.m2sc.ws.endpoint.DeliverDocumentEndpoint.deliverDocument(com.pb.service.ws.delivery.deliverDocument)
抛出com.pb.service.ws.delivery.DeliveryFault]:
您的端点是用@endpoint注释的,还是实现了MessageHandler或PayloadEndpoint等受支持的接口?

如何解决该问题?已解决:当generate sources插件运行时,生成的源被拆分为3个不同的包。我必须像这样把它们都列给马歇尔:

@Bean
public Jaxb2Marshaller marshaller() {
    Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
    marshaller.setPackagesToScan("com.pb.service.ws.common", "com.pb.service.ws.delivery", "com.pb.service.ws.model");
    marshaller.setMtomEnabled(true);
    return marshaller;
}