【问题标题】:Push data to Soap webservice with Spring使用 Spring 将数据推送到 Soap Web 服务
【发布时间】:2015-10-20 13:41:09
【问题描述】:

您好,我提到了link 来使用 SOAP Web 服务。 但我不确定如何调用客户端方法。

请在下面找到我的代码: ClientConfig.java

package com.exclusively.unicommerce.service;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;

@Configuration
public class ClientConfig {

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

@Bean
public SaleOrderClient saleorderclient(Jaxb2Marshaller marshaller) {
    SaleOrderClient client = new SaleOrderClient();
    client.setDefaultUri("https://link.com/services/soap/?version=1.6");
    client.setMarshaller(marshaller);
    client.setUnmarshaller(marshaller);
    return client;
}


}

SaleOrderClient.java

public class SaleOrderClient extends WebServiceGatewaySupport{

private static final String uri = "https://link.com/services/soap/?version=1.6";

public String createSaleOrder(Suborder suborder)
{
    SaleOrder saleorder = new SaleOrder();
    saleorder = setSaleOrderObject(suborder);
    CreateSaleOrderRequest request = new CreateSaleOrderRequest();
    request.setSaleOrder(saleorder);

    //PLEASE NOTE THIS Line of CODE.
    this.getWebServiceTemplate().marshalSendAndReceive(uri,request);
    return "Pushed to Unicommerce";
}

public SaleOrder setSaleOrderObject(Suborder suborder)
{
    SaleOrder saleorder = new SaleOrder();
    saleorder.setAdditionalInfo(null);
    saleorder.setAddresses(null);
    saleorder.setCashOnDelivery(null);
    saleorder.setCFormProvided(null);
    saleorder.setChannel(null);
    saleorder.setCode(null);
    saleorder.setCurrencyCode(null);
    saleorder.setCustomerCode(null);
    saleorder.setDisplayOrderCode(null);
    saleorder.setNotificationEmail(null);
    saleorder.setNotificationMobile(null);
    saleorder.setVerificationRequired(null);
    return saleorder;
}
}

SuborderController.java

@Controller
public class SuborderController {

private String currentStatus, finalStatus,status,response;

@Autowired
private SuborderService suborderservice;

@RequestMapping(value = "/orders/add", method = RequestMethod.POST)
@ResponseBody
public String addOrders(@RequestBody Suborder order) {
    if(order.getSuborderId() ==  null ||   order.getSuborderId().isEmpty())
        return "BAD REQUEST";
    suborderservice.addOrders(order);
    //**CALL To createSaleorder(order)**
    //response = saleorderclient.createSaleorder(order);
    return response;
}

这里需要注意的是,webservice 提供了请求类但没有响应类。第二个我试过了

  @Autowired
  SaleOrderClient saleorderclient;

但是它抛出了 bean not found 异常。

我无法理解如何访问此方法。 请帮忙。 TIA。

【问题讨论】:

  • 如果找不到 bean,则不会读取配置。你的班级也是SaleOrderClient 而不是SaleorderClient...
  • 我需要做哪些改变?
  • 确保使用您的@Configuration 类。其余的我不知道,因为您的帖子中没有这些信息。
  • 如何确保使用我的配置类?您还需要什么信息?
  • 如果您必须提出这个问题,您可能需要先阅读参考指南(第 3 部分关于工作原理)。将其作为 bean 添加到您的其他配置中,或确保组件扫描正在扫描配置类所在的包。

标签: java spring web-services spring-mvc soap


【解决方案1】:

我通过在 SuborderController.java 中添加下面提到的行解决了我的问题

    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
    ctx.register(ClientConfig.class);
    ctx.refresh();
    SaleOrderClient saleorderclient = ctx.getBean(SaleOrderClient.class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    相关资源
    最近更新 更多