package com.ewolff.orderhandling.webservice; import javax.annotation.Resource; import javax.xml.transform.Source; import org.jdom.Element; import org.jdom.Namespace; import org.jdom.transform.JDOMSource; import org.springframework.integration.Message; import org.springframework.integration.MessageChannel; import org.springframework.integration.MessageHeaders; import org.springframework.integration.channel.RendezvousChannel; import org.springframework.integration.support.MessageBuilder; import org.springframework.ws.server.endpoint.annotation.Endpoint; import org.springframework.ws.server.endpoint.annotation.PayloadRoot; import org.springframework.ws.server.endpoint.annotation.XPathParam; import org.w3c.dom.NodeList; import com.ewolff.orderhandling.domain.Order; import com.ewolff.orderhandling.domain.OrderItem; @Endpoint public class OrderEndpoint { private static Namespace namespace = Namespace.getNamespace("tns", "http://www.ewolff.com/order"); private MessageChannel fulfillment; @Resource public void setFulfillment(MessageChannel fulfillment) { this.fulfillment = fulfillment; } @PayloadRoot(localPart = "orderRequest", namespace = "http://www.ewolff.com/order") public Source handleOrder( @XPathParam("/tns:orderRequest/tns:order/tns:order-item") NodeList orderItemNodeList, @XPathParam("/tns:orderRequest/tns:order/tns:express/text()") Boolean expressAsBoolean, @XPathParam("/tns:orderRequest/tns:order/tns:customer/text()") double customer) { boolean express = false; if (expressAsBoolean != null) { express = expressAsBoolean; } Order order = new Order(express, (int) customer); for (int i = 0; i < orderItemNodeList.getLength(); i++) { org.w3c.dom.Element element = (org.w3c.dom.Element) orderItemNodeList .item(i); int count = Integer.parseInt(element .getElementsByTagNameNS("http://www.ewolff.com/order", "count").item(0).getTextContent()); String item = element .getElementsByTagNameNS("http://www.ewolff.com/order", "item").item(0).getTextContent(); order.addOrderItem(new OrderItem(count, item)); } RendezvousChannel rendezvousChannel = new RendezvousChannel(); Message<Order> message = MessageBuilder.withPayload(order) .setHeader(MessageHeaders.REPLY_CHANNEL, rendezvousChannel) .build(); fulfillment.send(message); Element response = new Element("orderResponse", namespace); Element result = new Element("result", namespace); response.addContent(result); if (rendezvousChannel.receive(5000) == null) { result.setText("failure"); } else { result.setText("success"); } return new JDOMSource(response); } }