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 举报,一经查实,本站将立刻删除。

相关推荐


使用本地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-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res