วันจันทร์ที่ 23 กรกฎาคม พ.ศ. 2550

วิธีแก้ Too many parameters exceeding the limit of 255 words เวลา Generate WSDL

วิธีแก้จริงๆ นั้นไม่มีเพราะเป็น Limit ของ JDK 1.4.x อยู่แล้วครับ เราสามารถแก้โดยเลี่ยง ที่ผมรู้ก็มี 2 วิธี
1. ให้ดูที่ File WSDL แล้วลบ Parameter ที่เราไม่ใช่ทิ้งไป แล้ว Generate Stub ใหม่ครับ ซึ่งจะได้เฉพาะ ฟิลด์ที่เราต้องการ อย่างเดียว (ถ้ามีที่ต้องการเอาไม่เกิน 255 ตัวแปรน่ะครับ)โดยไปลบที่ชื่อประมาณ tag <element type="xxx" name="xxx">(ซึ่งวิธีนีจะแก้กลับ Websphere 6.x ไม่ได้เพราะว่า Websphere จะมองว่า attribute มีค่า จะต้องดึงออกมาให้หมด แต่ถ้าเขาไม่ return มาให้จะทำงานได้ครับ)
2. ใช้วิธีเรียกผ่าน RPC เลย ซึ่งค่าที่ Return มานั้นจะเป็น SOAPElement (แต่จะเป็นของ Package ขึ้นอยู่กับตัว Server ที่เราทำ เช่นของ IBM จะเป็น com.ibm.ws.webservices.engine.xmlsoap.SOAPElement) แล้วเราค่อยดึงค่าอกมาคล้ายๆ กับ DOM4J หรือ JDOM

Example

//Init Service
String wsdlURL = <wsdl>;
String namespace = <namespace>;
String serviceName = <servicename>;
javax.xml.namespace.QName serviceQN = new javax.xml.namespace.QName(namespace, serviceName);
javax.xml.rpc.ServiceFactory serviceFactory = org.apache.axis.client.ServiceFactory.newInstance(); //เป็นส่วนที่ดึงค่าว่าจะใช้วิธีไหนในการ Call Web Service ซึ่งจะตามระบบที่เราเขียน และถ้าต้องการใช้เฉพาะเจาะจงไปเลยอย่าง Axis ให้อ้าง Service ที่อยู่ใน Axis ไปเลย
javax.xml.rpc.Service service = serviceFactory.createService(new java.net.URL(wsdlURL), serviceQN);

//Create Call
javax.xml.rpc.Call call = service.createCall();
call.setPortTypeName(serviceQN);
call.setOperationName(new javax.xml.namespace.QName(namespace, <operation>));
call.setPortTypeName(new javax.xml.namespace.QName(namespace , <port>));
call.setProperty(javax.xml.rpc.Call.ENCODINGSTYLE_URI_PROPERTY, "");
call.setProperty(javax.xml.rpc.Call.OPERATION_STYLE_PROPERTY, "wrapped");
Object[] reqObj = new java.lang.Object[] {<request>};
java.lang.Object _resp = call.invoke(reqObj);

คำอธิบายแต่ละตัว
1. <wsdl>คือ URL ของ WSDL ที่เราสามารถดึงออกมาได้
2. <namespace>คือ Name Space ของ WSDL นี้ โดยให้ดูที่ WSDL ที่ชื่อ targetNamespace
3. <servicename>คือ Service Name ของ WSDL นี้ โดยดูจาก wsdl:service ว่ามีชื่ออะไร
4. <operation>คือ Operation Name ของ WSDL นี้ โดยดูจาก wsdl:operation ว่ามีชื่อว่าอะไร
5. <port>คือ Port Type Name ของ WSDL นี้ โดยดูจาก wsdl:portType

วันอังคารที่ 10 กรกฎาคม พ.ศ. 2550

Java Config Proxy

สำหรับ IBM
สามารถ Config ได้สองแบบ
1. โดยใช้ System.setProperty(Class Path,ค่า) ซึ่งค่าที่ Set ไปจะใช้

สำหรับ HTTP
com.ibm.wsspi.webservices.HTTP_PROXYHOST_PROPERTY
com.ibm.wsspi.webservices.HTTP_PROXYPORT_PROPERTY
com.ibm.wsspi.webservices.HTTP_PROXYUSER_PROPERTY
com.ibm.wsspi.webservices.HTTP_PROXYPASSWORD_PROPERTY
สำหรับ HTTPS
com.ibm.wsspi.webservices.HTTPS_PROXYHOST_PROPERTY
com.ibm.wsspi.webservices.HTTPS_PROXYPORT_PROPERTY
com.ibm.wsspi.webservices.HTTPS_PROXYUSER_PROPERTY
com.ibm.wsspi.webservices.HTTPS_PROXYPASSWORD_PROPERTY

2. ไปที่หน้า Admin Console แล้วเลือกที่ Global security > Custom properties จากนั้นก็ Add ลงไปเหมือน System.setProperty




สำหรับทั่วไปจะเป็นดังนี้
1. จะใช้ System.setProperty เหมือนกัน แต่จะใช้

http.proxySet สำหรับว่าจะให้มีการใช้ค่า Proxy หรือเปล่า
http.proxyHost
http.proxyPort



Reference
IBM Config Proxy
Configure HTTP basic authentication for Web services
Narisa Socket Programming

วันพุธที่ 4 กรกฎาคม พ.ศ. 2550

การ Config Clob Type บน Hibernate

การ Config นั้น บน XML เราจะไม่ต้องไปทำอะไรเลย แต่จะไปทำที่ Java File ให้เป็น Type --> java.sql.Clob ก็จะสามารถใช้งานได้ครับ

วิธีการ Convert java.sql.Clob to String ก็ทำดังนี้

param_value.getSubString(1, (int)param_value.length());

โดย param_value จะเป็น java.sql.Clob