2015-10-20 52 views
0

嗨我已经提到这个link用于使用SOAP web服务。 但我不知道如何调用客户端方法。用Spring把SOAP数据推送到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; 
} 

这里要注意的事情是,web服务提供请求类但没有响应类。第二我试过

@Autowired 
    SaleOrderClient saleorderclient; 

但是它抛豆找不到异常。

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

+0

添加下面提到线如果bean没有找到配置不阅读解决了我的问题。你的班级也是'SaleOrderClient'而不是'SaleorderClient' ... –

+0

我需要做些什么改变? – Antariksh

+0

确保你的'@ Configuration'类被使用。其余的我不知道,因为这些信息在你的文章中不可用。 –

回答

0

我在SuborderController.java

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