package com.test.user;
import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import org.w3c.dom.Document;
import com.test.user.UserExtended;
public class WebServicesPTHandler extends SpringBeanAutowiringSupport implements SOAPHandler<SOAPMessageContext> {
@Autowired
UserExtended userExtended;
@Override
public boolean handleMessage(SOAPMessageContext context) {
Boolean isRequest = (Boolean)context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
// for response message only, true for outbound messages, false for inbound
if (!isRequest) {
try {
SOAPMessage soapMsg = context.getMessage();
SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope();
SOAPHeader soapHeader = soapEnv.getHeader();
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true); // never forget this!
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = soapEnv.getOwnerDocument();
// Create XPathFactory object
XPathFactory xpathFactory = XPathFactory.newInstance();
// Create XPath object
XPath xpath = xpathFactory.newXPath();
String xpathString =
"/*[local-name()='Envelope']/*[local-name()='Header']/*[local-name()='MessageHeader']"
+ "/*[local-name()='ExtendedData']/*[local-name()='DCC']/*[local-name()='SEC']"
+ "/*[local-name()='USERINFOS']/*[local-name()='OFFICEID']/@VALUE";
XPathExpression expression = xpath.compile(xpathString);
userExtended.setOfficeId((String)expression.evaluate(doc, XPathConstants.STRING));
} catch (XPathExpressionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (SOAPException e) {
System.err.println(e);
}
}
// continue other handler chain
return true;
}
@Override
public boolean handleFault(SOAPMessageContext context) {
System.out.println("Server : handleFault()......");
return true;
}
@Override
public void close(MessageContext context) {
System.out.println("Server : close()......");
}
@Override
public Set<QName> getHeaders() {
System.out.println("Server : getHeaders()......");
return null;
}
}
package com.test.user;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
@Qualifier("userExtended")
public class UserExtended {
private String OfficeId;
private String Sign;
public String getOfficeId() {
return OfficeId;
}
public void setOfficeId(String officeId) {
OfficeId = officeId;
}
public String getSign() {
return Sign;
}
public void setSign(String sign) {
Sign = sign;
}
}
Yukarıdaki handler da spring bean classını kullanmaya çalışıyorum ancak null olduğu için herhangi bir atama işlemi gerçekleştiremiyorum. services.xml içinde gerekli tanımlar yapıldı. Bunu nasıl başarabilirim.