Мне нужно написать клиент для вызова службы SOAP с использованием весенней загрузки. Я попробовал около 6-7 учебных пособий по net, включая https://spring.io/guides/gs/consuming-web-service/ и многие другие. В общем, я получаю общую ошибку:
java.lang.IllegalStateException: No marshaller registered. Check configuration of WebServiceTemplate.
Служба SOAP развернута на http://server.test.net:1234/SOAPTest/WebService/DeployedSvc
Мое текущее состояние кода после следующих многочисленных онлайн-ссылок:
My SOAPConfig
ниже:
@Configuration
public class SOAPConfig {
@Bean
public Jaxb2Marshaller marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath("com.test.soap.wsdl");
return marshaller;
}
@Bean
public SOAPClient soapConnector(Jaxb2Marshaller marshaller) {
SOAPClient client = new SOAPClient();
client.setDefaultUri("http://server.test.net:1234/SOAPTest/WebService/DeployedSvc");
client.setMarshaller(marshaller);
client.setUnmarshaller(marshaller);
return client;
}
}
Пакет com.test.soap.wsdl
содержит ObjectFactory
, который я сгенерировал, используя:
<artifactId>maven-jaxb2-plugin</artifactId><version>0.13.2</version>
My SOAPClient
ниже:
import javax.xml.bind.JAXBElement;
import org.springframework.ws.client.core.support.WebServiceGatewaySupport;
import com.test.soap.wsdl.InfoResponse;
public class SOAPClient extends WebServiceGatewaySupport {
public InfoResponse getInfo(String url, Object request){
JAXBElement res = (JAXBElement) getWebServiceTemplate().marshalSendAndReceive(url, request);
return (InfoResponse) res.getValue();
}
}
Когда я запускаю отладчик, значение marshaller
, возвращаемое SOAPConfig, полностью заполнено нулевыми значениями, то есть adapters=null, beanClassLoader=null, jaxbContext=null, marshallerListener=null, unmarshallerListerner=null
и так далее.
Что я упускаю из этих многочисленных ссылок и делаю неправильно?