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 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.