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
@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
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.
Merhaba arkadaşlar,
Tam olarak nedenini anlamasamda sorun çözüldü.
@Autowired yerine @Resource eklediğimde SoapHandler içerisinde kullanabildim. İki anotation’ı karşılaştıran aşağıdaki linkten yararlanabilirsiniz. https://stackoverflow.com/questions/4093504/resource-vs-autowired.
İyi çalışmalar.