Archive for the ‘ Web Service ’ Category

การเปลี่ยน Http port ใน Jboss AS 6.1

มีโอกาศเลื่อนขั้นมาใช้ Jboss AS 6.1 เนื่องจากในเครื่องลง Web Server และ Application Server ไว้หลายตัว ทำให้ต้องเปลี่ยน port ของ Jboss AS 6.1 ก่อนที่จะใช้งาน ขั้นตอนปกติสำหรับการเปลี่ยน port Http ใน Jboss 4.x, 5.x นั้นเราสามารถเปิดไฟล์

<JBOSS_HOME>\server\<server tyep>\deploy\jbossweb.sar\server.xml

จากนั้นแก้ไขค่า port ตามที่ต้องการได้ แต่ใน Jboss AS 6.1 นั้นแตกต่างออกไป หากเราเปิดไฟล์

<JBOSS_HOME>\server\<server tyep>\deploy\jbossweb.sar\server.xml

ขึ้นมา จะเจอข้อความดังนี้

<Connector protocol="HTTP/1.1" port="${jboss.web.http.port}" address="${jboss.bind.address}" 
         redirectPort="${jboss.web.https.port}" />

port address and redirectPort ใช้ค่าจากไฟล์อื่นอีกที่ (Properties หรือ XML config) จากการสอบถามจาก google แล้วก็ได้ความว่า ให้เปิดไฟล์

<JBOSS_HOME>\server\<server tyep>\conf\bindingservice.beans\META-INF\bindings-jboss-beans.xml

จากนั้นมองหา tag ดังต่อไปนี้

<bean class="org.jboss.services.binding.ServiceBindingMetadata">
	<property name="serviceName">jboss.web:service=WebServer</property>
	<property name="bindingName">HttpConnector</property>
	<property name="port">8080</property>
	<property name="description">JBoss Web HTTP connector socket; also drives the values for the HTTPS and AJP sockets</property>
</bean>

แก้ไข port ตามที่ต้องการ ทดลองรัน Jboss ขึ้นมาจะเห็นว่า port เปลี่ยนไปแล้ว

Starting Coyote HTTP/1.1 on http-127.0.0.1-9090
Starting Coyote AJP/1.3 on ajp-127.0.0.1-8009
JBossAS [6.1.0.Final "Neo"] Started in 27s:662ms

การใช้งาน Web Service JAX-WS 2.1.x ใน GlassFish V1.x (Sun Appication Server 8.2)

มีปัญหาเกี่ยวกับการใช้งาน Web Service client JAX-WS style ใน Sun Appication Server 8.2 ซึ่งไม่สามารถรันได้เกิด Error ดังนี้

java.lang.NoClassDefFoundError: javax/xml/ws/BindingProvider
    at java.lang.ClassLoade​r.defineClass1(Nativ​e Method)
    at java.lang.ClassLoade​r.defineClass(ClassL​oader.java:620)
    at java.security.Secure​ClassLoader.defineCl​ass(SecureClassLoade​r.java:124)
    at org.apache.catalina.​loader.WebappClassLo​ader.findClassIntern​al(WebappClassLoader​.java:1819)
    at org.apache.catalina.​loader.WebappClassLo​ader.findClass(Webap​pClassLoader.java:87​2)
    at org.apache.catalina.​loader.WebappClassLo​ader.loadClass(Webap​pClassLoader.java:13​27)
    at org.apache.catalina.​loader.WebappClassLo​ader.loadClass(Webap​pClassLoader.java:12​06)
    at java.lang.ClassLoade​r.loadClassInternal(​ClassLoader.java:319​)

เนื่องจาก Sun Appication Server 8.2 ที่ใช้งานอยู่ใช้ JDK 1.5 (5.0) ทำให้ไม่มี package javax/xml/ws/ ซึ่งตอนพัฒนาโปรแกรมนั้นในเครื่องสำหรับพัฒนาโปรแกรมใช้ JDK 1.6 (6.0) และใช้ GlassFish V2.1 (Sun Appication Server 9.1) ทำให้ไม่เจอปัญหาดังกล่าว จาการค้นหาข้อมูลการแก้ไขให้สามารถใช้งานได้ ให้ทำดังนี้
1. .ดาวน์โหลด JAX-WS 2.1 จากเว็บ http://jax-ws.java.net แล้วคัดลอก Library

FastInfoset.jar
activation.jar
http.jar
jaxb-api.jar
jaxb-impl.jar
jaxws-api.jar
jaxws-rt.jar
jsr173_api.jar
jsr181-api.jar
jsr250-api.jar
mimepull.jar
resolver.jar
saaj-api.jar
saaj-impl.jar
sjsxp.jar
stax-ex.jar
streambuffer.jar

ไปวางใน

<GlassFish Home>\domains\<domain name>\lib\ext

เนื่องจากไม่อยากให้กระทบกับ domain อื่นๆเลยคัดลอกมาวางใน lib ของ domain นั้นๆ โดย .jar ที่ต้องใช้มีดังนี้ JAX-WS 2.1 Jar dependency
2. จากนั้นทำการ stop/start Server ใหม่ ก็สามารถใช้ได้แล้ว

แหล่งข้อมูล
JAX-WS RI 2.1.3 Release Notes

How to set timeout in JAX-RPC Web Service client

การกำหนดค่า Timeout ให้กับ Web Service Client ที่เป็น JAX-RPC นั้นถ้าใช้งานกับ WebSphere ก็ไม่อยากอะไรครับมี method ให้กำหนด Timeout อยู่ในตัว Stub เลยแต่พอมาทำบน Netbean และใช้งานกับ GlassFish Netbean กลับไม่สร้างให้ วุ่นวายพอควร ก็เลยหาวิธีจาก อ.google แล้วพอมีหนทางประมาณนี้
1. สร้าง HttpURLConnection ขึ้นมาเองโดยการ extends HttpClientTransport แล้วทำการ Override method createHttpConnection ดังนี้

package com.secondknow.ws;
import com.sun.xml.rpc.client.http.HttpClientTransport;
import com.sun.xml.rpc.soap.message.SOAPMessageContext;
import java.io.IOException;
import java.net.HttpURLConnection;

/**
 * Example HttpTransport
 * @author Supot Saelao
 * @version 1.0
 */
public class ExampleHttpTransport extends HttpClientTransport{
    private int timeout;

    public ExampleHttpTransport(){
		super();
	}

    public ExampleHttpTransport(int timeout){
        this.timeout = timeout;
    }

    @Override
    protected HttpURLConnection createHttpConnection(String endpoint, SOAPMessageContext context) throws IOException {
        HttpURLConnection httpConn = super.createHttpConnection(endpoint, context);
		//If set tmeout 0 never set timeout
        if(timeout > 0){
            httpConn.setReadTimeout(timeout);
            httpConn.setConnectTimeout(timeout);
        }
        return httpConn;
    }
}

Read more

[Java]การติดตั้ง Certificate(SSL) ใน Weblogic 8.1

ต่อจาก [Java]การ Generate Web Service Client ใน Weblogic 8.1
ตามติดด้วยงานติดตั้ง Certificate (SSL) ของ Web Servcie วิธีการก็ตามนี้ครับ
1. เข้าไปที่ C:\bea\jdk142_08\jre\lib\security (เปลี่ยน path ตามที่ติดตั้ง)

keytool -import -alias [alias_name] -file [Path of .cer] -keystore [keystore_name] -storepass [password]

[alias_name] : ชื่อ alias ที่ต้องการ
[Path of .cer] : path ของไฟล์ Certificate.cer
[keystore_name] : ชื่อ keystore
[password] : รหัสผ่าน
ตัวอย่างเช่น

keytool -import -alias example -file D:\example.cer -keystore cacerts -storepass exmpass

2. ดูว่ามี Certificate อะไรที่ติดตั้งบ้าง

keytool -list -keystore [keystore_name] -storepass [password]

[keystore_name] : ชื่อ keystore
[password] : รหัสผ่าน
ตัวอย่างเช่น

keytool -list -keystore cacerts -storepass exmpass

[Java]การ Generate Web Service Client ใน Weblogic 8.1

มีโอกาสได้แวะเวียนมาจับ Weblogic 8.1 อีกครั้ง (เค้ายังใช้กันนะครับพี่น้อง) และต้อง Generate Web Service Client ขึ้นมาใช้งาน วิธีการก็ง่ายมากครับตามนี้เลย

C:\bea\user_projects\domains\[domain_name]> setDomainEnv.cmd

[domain_name] : ชื่อโดเมนที่เราใช้งานครับ
แล้วใช้คำสั่ง

java weblogic.webservice.clientgen -wsdl [wsdl_file.wsdl] -packagename [package_name] -clientjar [Lib.jar]

[wsdl_file.wsdl] : ไฟล์ .WSDL ที่ได้มาจากผู้ให้บริการ
[package_name] : ชื่อ package
[Lib.jar] : ชื่อ jar ไฟล์ที่ต้องการ
ตัวอย่างเช่น

java weblogic.webservice.clientgen -wsdl example.wsdl -packagename com.example.ws -clientjar Example.jar