SOAP请求编组器无响应

如何解决SOAP请求编组器无响应

我正在尝试用Jaxb2Marshaller发送一个JAXBElement请求。我使用WSIMPORT从wsdl文件生成带有类的.jar。它产生了例如OBjectFactory.class,DocumentDataType.class,DocumentResponse.class,DocumentType.class。在对swagger doc ui的响应中,我收到了发送回的DocumentDataType,而不是DocumentResponse。我也无法直接与编组器发送DocumentDataType,因为它缺少@XmlRootElement。因此,我正在使用ObjectFactory createDocumentData。我已删除了该帖子的网址。

主要问题是我没有收到来自SOAP请求的车辆数据响应。

 @XmlElementDecl(
    namespace = "http://...com/",name = "documentData"
  )
  public JAXBElement<DocumentDataType> createDocumentData(DocumentDataType var1) {
    return new JAXBElement(_DocumentData_QNAME,DocumentDataType.class,(Class)null,var1);
  }

在SOAP UI上,项目设置和请求都可以正常工作,并且在发送DocumentDataType之后,会有车辆数据的响应,但是在我的Java Spring Boot项目中却没有。我实施它的方法是否正确,还是有更好的方法?

我的配置类

@Configuration
public class MBOConfig {

  private final String WS_URL = "https://../ws/v1/AppraisalService";

  @Bean
  public SaajSoapMessageFactory messageFactory() {
    SaajSoapMessageFactory messageFactory = new SaajSoapMessageFactory();
    messageFactory.setSoapVersion(SoapVersion.SOAP_12);
    return messageFactory;
  }

  @Bean
  public Jaxb2Marshaller marshaller() {
    Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
    marshaller.setContextPath("com...");
    return marshaller;
  }

  @Bean
  public MBOService mboService(Jaxb2Marshaller marshaller) {
    MBOService service = new MBOService();
    service.setDefaultUri(WS_URL);
    service.setMarshaller(marshaller);
    service.setUnmarshaller(marshaller);
    service.setMessageFactory(messageFactory());
    service.setInterceptors(new ClientInterceptor[]{securityInterceptor()});
    return service;
  }

  @Bean
  public Wss4jSecurityInterceptor securityInterceptor() {
    Wss4jSecurityInterceptor wss4jSecurityInterceptor = new Wss4jSecurityInterceptor();
    wss4jSecurityInterceptor.setSecurementPasswordType("PasswordText");
    wss4jSecurityInterceptor.setSecurementActions(WSHandlerConstants.TIMESTAMP);
    wss4jSecurityInterceptor.setSecurementActions(WSHandlerConstants.USERNAME_TOKEN);
    wss4jSecurityInterceptor.setSecurementUsername("user");
    wss4jSecurityInterceptor.setSecurementPassword("password");
    wss4jSecurityInterceptor.setSecurementUsernameTokenNonce(true);
    wss4jSecurityInterceptor.setSecurementUsernameTokenCreated(true);
    return wss4jSecurityInterceptor;
  }
}

控制器类

@RestController
public class DocumentController {

  @Autowired
  private MBOService services;

  @PostMapping("/marshal")
  public JAXBElement<DocumentResponse> sendDocument() {
    return services.sendDocument();
  }
}

服务等级

public class MBOService extends WebServiceGatewaySupport {

  private static final Logger LOG = LoggerFactory.getLogger(MBOService.class);

  private final String WS_URL = "https://../ws/v1/AppraisalService";

  public JAXBElement<DocumentResponse> sendDocument() {
    JAXBElement<DocumentDataType> documentDataType = new ObjectFactory().createDocumentData(prepareDocument());
    JAXBElement<DocumentResponse> documentResponse = (JAXBElement<DocumentResponse>) getWebServiceTemplate()
        .marshalSendAndReceive(WS_URL,documentDataType);
    return documentResponse;
  }

  public DocumentDataType prepareDocument() {
    File file = createDummyFile();
    DocumentDataType data = new DocumentDataType();
    data.setClientCode("000011");
    data.setVin("WDD1179081N775710");
    data.setCorrelationID("123");
    data.setVersion("1");
    DocumentType document = new DocumentType();
    try {
      document.setDocumentData(Files.readAllBytes(file.toPath()));
      document.setFilename(file.getName());
      data.getDocuments().add(document);
    } catch (IOException e) {
      LOG.error("could not add file");
    }
    return data;
  }

  private File createDummyFile() {
    File file = new File("./dummy.pdf");
    try {
      if (file.createNewFile()) {
        LOG.info("file created");
      }
    } catch (IOException e) {
      LOG.error("unable to create dummy file.");
    }
    return file;
  }

}

DocumentDataType类

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
  name = "documentDataType",propOrder = {"clientCode","vin","correlationID","version","documents"}
)
public class DocumentDataType {
  protected String clientCode;
  @XmlElement(
    required = true
  )
  protected String vin;
  @XmlElement(
    required = true
  )
  protected String correlationID;
  @XmlElement(
    required = true
  )
  protected String version;
  @XmlElement(
    nillable = true
  )
  protected List<DocumentType> documents;

  public DocumentDataType() {
  }

  public String getClientCode() {
    return this.clientCode;
  }

  public void setClientCode(String var1) {
    this.clientCode = var1;
  }

  public String getVin() {
    return this.vin;
  }

  public void setVin(String var1) {
    this.vin = var1;
  }

  public String getCorrelationID() {
    return this.correlationID;
  }

  public void setCorrelationID(String var1) {
    this.correlationID = var1;
  }

  public String getVersion() {
    return this.version;
  }

  public void setVersion(String var1) {
    this.version = var1;
  }

  public List<DocumentType> getDocuments() {
    if (this.documents == null) {
      this.documents = new ArrayList();
    }

    return this.documents;
  }
}

DocumentResponse类

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
  name = "",propOrder = {"overalStatus","status"}
)
@XmlRootElement(
  name = "documentResponse"
)
public class DocumentResponse {
  protected int overalStatus;
  @XmlElement(
    required = true
  )
  protected List<ResponseType> status;

  public DocumentResponse() {
  }

  public int getOveralStatus() {
    return this.overalStatus;
  }

  public void setOveralStatus(int var1) {
    this.overalStatus = var1;
  }

  public List<ResponseType> getStatus() {
    if (this.status == null) {
      this.status = new ArrayList();
    }

    return this.status;
  }
}

ObjectFactory类

@XmlRegistry
public class ObjectFactory {
  private static final QName _AppraisalData_QNAME = new QName("http://...com/","appraisalData");
  private static final QName _ServiceFault_QNAME = new QName("http://...com/","serviceFault");
  private static final QName _DocumentData_QNAME = new QName("http://...com/","documentData");

  public ObjectFactory() {
  }

  public AppraisalDataType createAppraisalDataType() {
    return new AppraisalDataType();
  }

  public AppraisalResponse createAppraisalResponse() {
    return new AppraisalResponse();
  }

  public ResponseType createResponseType() {
    return new ResponseType();
  }

  public DocumentResponse createDocumentResponse() {
    return new DocumentResponse();
  }

  public DocumentDataType createDocumentDataType() {
    return new DocumentDataType();
  }

  public TireDataType createTireDataType() {
    return new TireDataType();
  }

  public DocumentType createDocumentType() {
    return new DocumentType();
  }

  public DamageDetailType createDamageDetailType() {
    return new DamageDetailType();
  }

  public TireSetDataType createTireSetDataType() {
    return new TireSetDataType();
  }

  public MissingPartType createMissingPartType() {
    return new MissingPartType();
  }

  public SingleDamageType createSingleDamageType() {
    return new SingleDamageType();
  }

  public ServiceFaultType createServiceFaultType() {
    return new ServiceFaultType();
  }

  @XmlElementDecl(
    namespace = "http://...com/",name = "appraisalData"
  )
  public JAXBElement<AppraisalDataType> createAppraisalData(AppraisalDataType var1) {
    return new JAXBElement(_AppraisalData_QNAME,AppraisalDataType.class,var1);
  }

  @XmlElementDecl(
    namespace = "http://...com/",name = "serviceFault"
  )
  public JAXBElement<ServiceFaultType> createServiceFault(ServiceFaultType var1) {
    return new JAXBElement(_ServiceFault_QNAME,ServiceFaultType.class,var1);
  }
}

等级依赖性

dependencies {
    developmentOnly 'org.springframework.boot:spring-boot-devtools'

    // Lombok
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'

    // Tomcat REST services mvc web layer
    implementation 'org.springframework.boot:spring-boot-starter-web'

    // SOAP services
    implementation 'org.springframework.boot:spring-boot-starter-web-services'

    // Springdoc openapi ui
    implementation 'org.springdoc:springdoc-openapi-ui:1.4.6'

    // IOUtils
    implementation 'commons-io:commons-io:2.8.0'

    // SAAJ SOAP
    compile group: 'javax.xml.soap',name: 'javax.xml.soap-api',version: '1.4.0'
    compile group: 'com.sun.xml.messaging.saaj',name: 'saaj-impl',version: '1.5.2-b01'

    // JAXB MARSHALLER
    compile group: 'org.glassfish.jaxb',name: 'jaxb-core',version: '2.3.0.1'
    compile group: 'com.sun.activation',name: 'jakarta.activation',version: '2.0.0-RC2'
    compile group: 'javax.xml.bind',name: 'jaxb-api',version: '2.3.1'
    compile group: 'org.glassfish.jaxb',name: 'jaxb-runtime',version: '2.3.2'

    // Spring ws security
    compile group: 'org.springframework.ws',name: 'spring-ws-security',version: '2.4.7.RELEASE'
    // Required with org.springframework.ws.spring-ws-security FIX WRONG_DOCUMENT_ERR
    compile group: 'org.apache.wss4j',name: 'wss4j-ws-security-dom',version: '2.3.0'

    compile group: 'org.apache.httpcomponents',name: 'httpclient',version: '4.3.6'

    // Appraisal jar
    compile files('libs/appraisal.jar')
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-