WSDL, сгенерированный в axis 1
, больше не поддерживается spring ws or CXF
. Таким образом, сгенерированные Java-классы из WSDL не будут иметь необходимой информации, необходимой для unmarshelling
запроса JAXB
в spring
. Таким образом, request
объект придет как null
.
Я сделал работу, в которой есть 2 вещи, которые нужно сделать
- Добавьте аннотацию корневого элемента xml поверх класса объекта запроса, сгенерированного из WSDL.
@ XmlRootElement (name = "getSomething", пространство имен =
«http://yoursite.com")
- вручную демонтировать объект запроса, как показано ниже:
код
SoapMessage message = (SoapMessage) messageContext.getRequest();
ByteArrayOutputStream out = new ByteArrayOutputStream();
message.writeTo(out);
String strMsg = new String(out.toByteArray()); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document d = db.parse(new InputSource(new StringReader(strMsg)));
Node getrequestObject = d.getElementsByTagName("yourtag").item(0);
JAXBContext jc = JAXBContext.newInstance(MyRequestObject.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
JAXBElement<SummaryObject> je = unmarshaller.unmarshal(new
DOMSource(getrequestObject), MyRequestObject.class);