0 oy
16 gösterim
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.
Java kategorisinde (130 puan) | 16 gösterim

1 cevap

0 oy
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.
(130 puan)

İlgili sorular

Birbirinden değerli Türkçe Blog yazarlarını takip edebilmek için ziyaret edebileceğiniz bir internet sitesi. yazarlar.hasscript.com