Posts Tagged ‘ Web Service

การใช้งาน 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

การ Call Web Service ผ่าน Proxy

ต่อจาก Post ก่อน Example Basic Axis Web Service client ติดปัญหานิดหน่อยตรงเรื่องบ proxy วิธีการก็คือเพิ่ม proxy เข้าไปใน System Properties ดังนี้ครับ

System.setProperty("http.proxyHost", "host");
 System.setProperty("http.proxyPort", "port");
 System.setProperty("http.proxyUser", "user");
 System.setProperty("http.proxyPassword", "password");

จากนั้นก็สามารถเรียก Web Service ผ่าน Axis ได้แล้วครับ

หรืออีกวิธีหนึ่งก็คือ Set ผ่าน Java -D command line ดังตัวอย่างนี้ครับ

java -Dhttp.proxyHost=host -Dhttp.proxyPort=port package.ws

อ้างอิงจาก
Sending SOAP Requests through an HTTP Proxy