search
Giriş
Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın Türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
0 oy
631 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 141 puan

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

İlgili sorular

1 oy
1 cevap 1.2K gösterim
1.2K gösterim
Selamlar, Spring de kullanılan metodların üzerindeki @Transactional yapısı ve bunların attributeları (Propagation,Isolation,...) nedir? ne amaçla kullanılır? İkinci sorum olarak da nested transactional işlemlerde commit ve rollback attribute ları da göz önüne alırsak exception alması durumunca nasıl çalışır? Sevgiler Erkan
11 Ağustos 2018 Java kategorisinde erkanerkisi 211 puan sordu
0 oy
1 cevap 588 gösterim
588 gösterim
Spring 'de component ile service ve repositor anatasyonlarının ne farkı vardır?
29 Eylül 2020 Java kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 1.9K gösterim
1.9K gösterim
Selam herkese, Spring-Data Jpa içinde JpaRepository PagingAndSortingRepository ve CrudRepository implementasyonlarının farkları nelerdir ? Hangisini neye göre tercih etmeliyiz ? Teşekkürler
26 Temmuz 2017 Java kategorisinde akotako 176 puan sordu
0 oy
1 cevap 1.6K gösterim
1.6K gösterim
Selam, java ile uygulama geliştirmek için Spring boot kullanabilirsin diye bir öneri duydum. Neden spring ile uygulama geliştirme ihtiyacı duyulmuştur, ne yarar sağlar bize proje ? Bir de Spring ve Spring boot kavramı aynı şeymidir?
18 Aralık 2016 Java kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 581 gösterim
581 gösterim
Spring^de hazır olarak gelen CrudRepository hibernate ile veri crud işlemlerini yapıyorum. Ancak standart methodların dışında, custom bir select yazmaya çalışırsak nasıl olur? public interface UserRepositoryCustom extends CrudRepository<User,Long>{ User findByLastName(String lastName); } yapsak yeterli olur mu?
16 Temmuz 2017 Java kategorisinde tolgacelik.art 2.0k puan sordu