26 Eylül 2021 Pazar

CXF İle SOAP

Giriş
CFX sadece bir kütüphane değil. Yanında bir sürü araçla birlikte geliyor
JAX-RS ve JAX-WS (yani SOAP) için kullanılabilir.

Örnek
Maven ile şöyle yaparız
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
       
<dependency>
  <groupId>org.glassfish.jaxb</groupId>
  <artifactId>jaxb-runtime</artifactId>
</dependency>
       
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
  <version>${cxf.version}</version>
</dependency>
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-features-logging</artifactId>
  <version>${cxf.version}</version>
</dependency>
Elimizde şöyle bir kod olsun
@WebService
public interface HelloWorldWS {
    @WebMethod
    String createMessage(@WebParam(name = "createMessageRequest", mode = WebParam.Mode.IN)
String name);
}

@Component
public class HelloWorldWSImpl implements HelloWorldWS{
    @Override
    public String createMessage(String name){
        return "Hello "+name;
    }
}
Şöyle yaparız. Spring uygulamasını çalıştırınca "http://localhost:8080/ws/helloWorldWS?wsdl" adresinde WSDL çıktısı görülebilir.
import javax.xml.ws.Endpoint;
import org.apache.cxf.Bus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import com.cfxconsumer.soapcxfconsumer.ws.HelloWorldWS;

@Configuration
@ImportResource({ "classpath:META-INF/cxf/cxf.xml" })
public class CxfWebServiceConfig {
  @Autowired
  private Bus cxfBus;

  @Bean
  public ServletRegistrationBean cxfServlet() {
    org.apache.cxf.transport.servlet.CXFServlet cxfServlet =
new org.apache.cxf.transport.servlet.CXFServlet();
    ServletRegistrationBean def = new ServletRegistrationBean<>(cxfServlet, "/ws/*");
    def.setLoadOnStartup(1);
    return def;
  }

  @Bean
  public Endpoint helloWorldWebService(HelloWorldWS helloWorldWS) {
    EndpointImpl endpoint = new EndpointImpl(cxfBus, helloWorldWS);
    endpoint.setAddress("/helloWorldWS");
    endpoint.publish();
    return endpoint;
  }
}


19 Eylül 2021 Pazar

Tika

Maven
Şu satırı dahil ederiz
<dependency>
  <groupId>org.apache.tika</groupId>
  <artifactId>tika-core</artifactId>
  <version>1.26</version>
</dependency>
AutoDetectParser Sınıfı
parse metodu
Örnek
Şöyle yaparız
InputStream stream = ...;

FileOutputStream fileOutputStream = ...;
ContentHandler handler = new BodyContentHandler(new WriteOutContentHandler(fileOutputStream));

Metadata metadata = new Metadata();

ParseContext context = new ParseContext();

Parser parser = new AutoDetectParser();

parser.parse(stream, handler, metadata, context);

8 Eylül 2021 Çarşamba

Lang3 StringUtils strip metodları

Giriş
strip işlemi için eğer düz Java kullanıyorsak String sınıfının replaceFirst() metodu kullanılabilir.
Örnek
Şöyle yaparız
"00000050.43".replaceFirst("^0+(?!$)", "")
Guava'nın CharMatcher sınıfı kullanılabilir.
Örnek
Şöyle yaparız
CharMatcher.is('0').trimLeadingFrom("00000050.43")
Bence en kolayı halen StringUtils sınıfı

stripEnd metodu
Sağdaki belirtilen diziye uyan karakterleri siler.
Örnek
Şöyle yaparız. null boşluk anlamına gelir.
StringUtils.stripEnd("abc  ", null)    = "abc"
Örnek
Şöyle yaparız.
private String rTrim(String str) {
  return StringUtils.stripEnd(str, /*stripChars*/" ");
}
stripStart metodu
Soldaki whitespace karakterlerini siler
Örnek
Şöyle yaparız.
private String lTrim(String str) {
  return StringUtils.stripStart(str, /*stripChars*/" ");
}
Örnek
Şöyle yaparız
StringUtils.stripStart("00000050.43","0");