Merhabalar,
wsimport ile client üretirken bazen xsd'lerden kaynaklanan çakışmalar yaşanabilmektedir. Bunları önlemek için komuta aşağıdaki kısım eklenirse, çakışan sınıfları otomatik olarak farklı isimlendirecek, böylece hem wsimport komutu çalışırken, hem de client kodu weblogic'e deploy edilirken, alınacak hatalar önlenmektedir.
wsimport -keep -verbose -B-XautoNameResolution http://localhost:7001/myw/MyService?WSDL
Maven wsimport plugin kullanıyorsanız, aşağıdaki şekilde eklenebilir,
<execution>
<id>execution</id>
<goals>
<goal>wsimport</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<args><arg>-B-XautoNameResolution</arg></args>
<wsdlUrls>
<wsdlUrl>${"WSDL_ADDRESS_HERE"}</wsdlUrl>
</wsdlUrls>
<packageName>MY_PACKAGE_NAME</packageName>
</configuration>
</execution>
Herkese iyi çalışmalar.
13 Ocak 2014 Pazartesi
12 Ocak 2014 Pazar
JDK wsimport ile Jaxws webservis client'i ile webservis çağırma
Merhabalar,
wsimport ile ürettiğiniz webservis client'larından aşağıdaki şekilde request yapabilirsiniz.
MyService_Service service = new MyService_Service(
this.getClass()
.getResource(
"/com/abc/webservices/wsdls/Mywsdl.wsdl"),
new QName("http://mobile..abc.com/",
"MyService"));
MyService port = service.getMyServiceImplPort();
try {
((BindingProvider) port)
.getRequestContext()
.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"https://localhost:7001/myContext/MyService?WSDL");
// ((BindingProvider) port).getRequestContext().put(
// BindingProvider.USERNAME_PROPERTY, "myusername");
// ((BindingProvider) port).getRequestContext().put(
// BindingProvider.PASSWORD_PROPERTY, "mypassword");
// ((BindingProvider)port).getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS,
// Collections.singletonMap("Content-Type",Collections.singletonList("text/xml")));
} catch (Exception e) {
throw e;
}
com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true;
port.calculate(3,5);
Herkese iyi günler.
wsimport ile ürettiğiniz webservis client'larından aşağıdaki şekilde request yapabilirsiniz.
MyService_Service service = new MyService_Service(
this.getClass()
.getResource(
"/com/abc/webservices/wsdls/Mywsdl.wsdl"),
new QName("http://mobile..abc.com/",
"MyService"));
MyService port = service.getMyServiceImplPort();
try {
((BindingProvider) port)
.getRequestContext()
.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"https://localhost:7001/myContext/MyService?WSDL");
// ((BindingProvider) port).getRequestContext().put(
// BindingProvider.USERNAME_PROPERTY, "myusername");
// ((BindingProvider) port).getRequestContext().put(
// BindingProvider.PASSWORD_PROPERTY, "mypassword");
// ((BindingProvider)port).getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS,
// Collections.singletonMap("Content-Type",Collections.singletonList("text/xml")));
} catch (Exception e) {
throw e;
}
com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true;
port.calculate(3,5);
Herkese iyi günler.
Hayat Kurtaran Bilgiler Servisi - 3 - Weblogic preload sınıfları yerine projenin sınıflarını kullanma
Merhabalar,
Projenizi weblogic'e yükledikten sonra weblogic'de bulunan ve kullanılan sınıflar yerine, örneğin javax.jws.* sınıfları, projenizde bulunan ya da dependency'lerinden gelen sınıfların kullanılmasını istiyorsanız,
EAR'ınızda bulunan weblogic-application.xml dosyasına aşağıdaki gibi kayıtlar eklenmelidir.
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-application
xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-application"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/javaee_5.xsd http://www.bea.com/ns/weblogic/weblogic-application http://www.bea.com/ns/weblogic/weblogic-application/1.0/weblogic-application.xsd">
<wls:application-param>
<wls:param-name>webapp.encoding.default</wls:param-name>
<wls:param-value>UTF-8</wls:param-value>
</wls:application-param>
<wls:prefer-application-packages>
<wls:package-name>javax.el.*</wls:package-name>
<wls:package-name>com.sun.el.*</wls:package-name>
<wls:package-name>antlr.*</wls:package-name>
<wls:package-name>org.apache.commons.*</wls:package-name>
<wls:package-name>org.apache.xmlbeans.*</wls:package-name>
<wls:package-name>org.springframework.*</wls:package-name>
<wls:package-name>javax.validation.*</wls:package-name>
<wls:package-name>org.hibernate.*</wls:package-name>
<wls:package-name>org.hibernate.validator.*</wls:package-name>
<wls:package-name>javax.persistence.spi.*</wls:package-name>
<wls:package-name>javax.persistence.criteria.*</wls:package-name>
<wls:package-name>javax.persistence.metamodel.*</wls:package-name>
<wls:package-name>javax.persistence.*</wls:package-name>
<wls:package-name>org.slf4j.impl*</wls:package-name>
<wls:package-name>org.slf4j.helpers*</wls:package-name>
<wls:package-name>org.slf4j.spi.*</wls:package-name>
<wls:package-name>org.slf4j.*</wls:package-name>
</wls:prefer-application-packages>
</wls:weblogic-application>
Burada dikkat edilmesi gereken husus, eklediğiniz paketler altında bulunan sınıflar ile, weblogic'in geri kalan sınıfları arasında uyumsuzluk olmamasıdır. Eğer eklediğiniz paketler projenizin kütüphanelerinden geliyorsa, bu kütüphanelerin nversiyon uyumluluğuna dikkat etmelisiniz.
Herkese iyi günler.
Projenizi weblogic'e yükledikten sonra weblogic'de bulunan ve kullanılan sınıflar yerine, örneğin javax.jws.* sınıfları, projenizde bulunan ya da dependency'lerinden gelen sınıfların kullanılmasını istiyorsanız,
EAR'ınızda bulunan weblogic-application.xml dosyasına aşağıdaki gibi kayıtlar eklenmelidir.
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-application
xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-application"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/javaee_5.xsd http://www.bea.com/ns/weblogic/weblogic-application http://www.bea.com/ns/weblogic/weblogic-application/1.0/weblogic-application.xsd">
<wls:application-param>
<wls:param-name>webapp.encoding.default</wls:param-name>
<wls:param-value>UTF-8</wls:param-value>
</wls:application-param>
<wls:prefer-application-packages>
<wls:package-name>javax.el.*</wls:package-name>
<wls:package-name>com.sun.el.*</wls:package-name>
<wls:package-name>antlr.*</wls:package-name>
<wls:package-name>org.apache.commons.*</wls:package-name>
<wls:package-name>org.apache.xmlbeans.*</wls:package-name>
<wls:package-name>org.springframework.*</wls:package-name>
<wls:package-name>javax.validation.*</wls:package-name>
<wls:package-name>org.hibernate.*</wls:package-name>
<wls:package-name>org.hibernate.validator.*</wls:package-name>
<wls:package-name>javax.persistence.spi.*</wls:package-name>
<wls:package-name>javax.persistence.criteria.*</wls:package-name>
<wls:package-name>javax.persistence.metamodel.*</wls:package-name>
<wls:package-name>javax.persistence.*</wls:package-name>
<wls:package-name>org.slf4j.impl*</wls:package-name>
<wls:package-name>org.slf4j.helpers*</wls:package-name>
<wls:package-name>org.slf4j.spi.*</wls:package-name>
<wls:package-name>org.slf4j.*</wls:package-name>
</wls:prefer-application-packages>
</wls:weblogic-application>
Burada dikkat edilmesi gereken husus, eklediğiniz paketler altında bulunan sınıflar ile, weblogic'in geri kalan sınıfları arasında uyumsuzluk olmamasıdır. Eğer eklediğiniz paketler projenizin kütüphanelerinden geliyorsa, bu kütüphanelerin nversiyon uyumluluğuna dikkat etmelisiniz.
Herkese iyi günler.
Etiketler:
Hayat Kurtaran Bilgiler Serisi,
Java,
JaxWS
Hayat Kurtaran Bilgiler Serisi - 2 - JaxWS webservisleri için dump
Merhabalar,
Jaxws web servislerinizde client üretip bağlantı denediğinizde request ve response'i server logunda görmek için aşağıdaki satırı kodlarınıza eklemeniz yeterlidir.
com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true;
Kolay gelsin.
Jaxws web servislerinizde client üretip bağlantı denediğinizde request ve response'i server logunda görmek için aşağıdaki satırı kodlarınıza eklemeniz yeterlidir.
com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true;
Kolay gelsin.
Etiketler:
Hayat Kurtaran Bilgiler Serisi,
Java,
JaxWS
5 Aralık 2013 Perşembe
Hayat Kurtaran Bilgiler Serisi - 1
Merhabalar,
Gündelik hayatta yazılım geliştirirken bazı püf noktalar bizi çok uğraştırabiliyor, bunu tecrübe ettikten sonra "bu muymuş??" dediğimiz birçok şeyi, farkedene kadar zamanımız akıp gidebiliyor. Ben de, kendi karşılaştığım bu "Hayat kurtaran" püf noktaları burada yazıyor olacağım.
Birinci hayat kurtaran püf nokta "organize imports" olsun. Eclipse'de projeye sağ tıklayınca gördüğümüz birçok seçenekten çok fazla kullanmadığımız bir nokta, ama işimiz düştü mü de çok güzel iş görüyor. Örneğin projede kullanılan kütüphanede bir sınıfın pathi değişti, com.abc yerine com.cba oldu, bunu projenin birçok yerinde elle düzeltmek yerine aşağıdaki gibi organize imports seçeneği ile tek hamlede halledebilirsiniz.
İyi yazılımlar ;)
Gündelik hayatta yazılım geliştirirken bazı püf noktalar bizi çok uğraştırabiliyor, bunu tecrübe ettikten sonra "bu muymuş??" dediğimiz birçok şeyi, farkedene kadar zamanımız akıp gidebiliyor. Ben de, kendi karşılaştığım bu "Hayat kurtaran" püf noktaları burada yazıyor olacağım.
Birinci hayat kurtaran püf nokta "organize imports" olsun. Eclipse'de projeye sağ tıklayınca gördüğümüz birçok seçenekten çok fazla kullanmadığımız bir nokta, ama işimiz düştü mü de çok güzel iş görüyor. Örneğin projede kullanılan kütüphanede bir sınıfın pathi değişti, com.abc yerine com.cba oldu, bunu projenin birçok yerinde elle düzeltmek yerine aşağıdaki gibi organize imports seçeneği ile tek hamlede halledebilirsiniz.
İyi yazılımlar ;)
Etiketler:
Eclipse,
Hayat Kurtaran Bilgiler Serisi,
Java
6 Kasım 2013 Çarşamba
Junit&PowerMock ile static && void metodları mocklamaca & test etmece
Selamlar,
Başlıkta tarif edilen ve tekrar aşağıya yazmaya üşenilen durum için aşağıdaki kodu kullandım, isteyen alabilir ;)
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import java.math.BigDecimal;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({MyStaticClassEx.class})
public class MyTest
{
protected MyStaticClassEx mockMyStaticClassEx;
protected Request request = new Request();
protected Long longNumber = new Long( 333 );
@Before
public void setUp() throws Exception {
// fill Request object
// ...
mockMyStaticClassEx();
}
public void mockMyStaticClassEx()
{
mockMyStaticClassEx = PowerMockito.mock( MyStaticClassEx.class );
PowerMockito.when( mockMyStaticClassEx.getId() ).thenReturn( longNumber );
// void method mocking
PowerMockito.doNothing().when( mockMyStaticClassEx ).insertCouponActivity( Mockito.anyLong(), Mockito.anyLong() );
PowerMockito.mockStatic( MyStaticClassEx.class );
// static method
PowerMockito.when( MyStaticClassEx.getInstance() ).thenReturn( mockMyStaticClassEx );
}
@Test
public void test() throws Exception {
try {
Response response = MainClass.getReq( request );
assertEquals( true, response.result() );
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
assertFalse(true);
}
}
}
Başlıkta tarif edilen ve tekrar aşağıya yazmaya üşenilen durum için aşağıdaki kodu kullandım, isteyen alabilir ;)
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import java.math.BigDecimal;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({MyStaticClassEx.class})
public class MyTest
{
protected MyStaticClassEx mockMyStaticClassEx;
protected Request request = new Request();
protected Long longNumber = new Long( 333 );
@Before
public void setUp() throws Exception {
// fill Request object
// ...
mockMyStaticClassEx();
}
public void mockMyStaticClassEx()
{
mockMyStaticClassEx = PowerMockito.mock( MyStaticClassEx.class );
PowerMockito.when( mockMyStaticClassEx.getId() ).thenReturn( longNumber );
// void method mocking
PowerMockito.doNothing().when( mockMyStaticClassEx ).insertCouponActivity( Mockito.anyLong(), Mockito.anyLong() );
PowerMockito.mockStatic( MyStaticClassEx.class );
// static method
PowerMockito.when( MyStaticClassEx.getInstance() ).thenReturn( mockMyStaticClassEx );
}
@Test
public void test() throws Exception {
try {
Response response = MainClass.getReq( request );
assertEquals( true, response.result() );
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
assertFalse(true);
}
}
}
Classpath'i aynı olan ve iki farklı JAR'da bulunan sınıflardan hangisinin kullanılacağına karar vermece
Selamlar,
Eğer projenizde aynı classpath'e ve isme sahip, farklı JARlarda bulunan iki sınıfınız var ise, IDEmiz pom.xml'de üstte olan JAR'dan import ediyor bu sınıfı. Yani, eğer diğer JARdaki sınıfı import etmek isterseniz, pom.xml'de dependency olarak diğer JAR tanımının üstüne taşımanız yeterli olacaktır.
Bilginize...
Eğer projenizde aynı classpath'e ve isme sahip, farklı JARlarda bulunan iki sınıfınız var ise, IDEmiz pom.xml'de üstte olan JAR'dan import ediyor bu sınıfı. Yani, eğer diğer JARdaki sınıfı import etmek isterseniz, pom.xml'de dependency olarak diğer JAR tanımının üstüne taşımanız yeterli olacaktır.
Bilginize...
Kaydol:
Kayıtlar (Atom)
