2011年8月15日 星期一

[CSS]下拉選單被google map檔住

標題說真的有點長~
發生的情況還要幾個先決條件~
drop down menu(float) + google map + IE
反正又是萬惡IE啦~~

解法當然首先要設定z-index..
float的 ul style="z-index:100"(反正要大)
google map的 div style="z-index:1"(比上面的小)

但是在某些情況下IE還是會被地圖擋住..
這時候要檢查css裡面的 position
IE下z-index要正常運作的一個前題是position:absolute..
所以如果這兩個地方如果有一個不是~ 很可能就不會作用..

2011年8月11日 星期四

[AXIS2] 建立 web service

axis裡面雖然有很簡單的pojo可以用~
但是...他規定不能有package..在項目管理上就不太方便..
所以還是要包成service --> aar比較實在Orz..

幾個地方要注意的大概就是...下面內容mark過~ xml改tag大小於..不然又show不出來了QQ

service class 照正常Java的寫..method開public
public class Service {
public String getCodeMsg(String code) {
return "unknow";
}

public HistoryResponse getHistory(String group, String startDt, String endDt) {
return null;
}
}

Compire程式時~ 記得加上-g, 這樣生出來的wsdl才有名稱~不然會變參數1, 參數2...

META-INF裡的service.xml要會寫..一個service.xml只能有一個service..在管理上真是有點不方便~_~..要切不同service就要編不同的service.xml跟aar
<service name="test-service">
<description>
This service for test
</description>
<parameter name="ServiceClass">xxx.xxx.Service</parameter>
<operation name="getCodeMsg">
<messagereceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
<operation name="getHistory">
<messagereceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
</service>

要會包aar..偶習慣在檔案結構排好後..寫個簡易bat, 用cmd包去tomcat下
cd D:\project\ws\xxx\classes
d:
jar -cvf D:\apache-tomcat-7.0.0\webapps\soap\WEB-INF\services\xx-1.0.aar .

佈署時~相關其他用到的jar檔還是要丟進該axis的WEB-INF/lib下..(所以還是要重起Orz)丟service那個資料夾不怎麼想理我就是了~大概他不會動態去load副檔不一樣的..所以aar其實不用包太多~ 包太多也沒啥用一_一|||

接著去axis2的介面看有沒有起來
default index..
http://127.0.0.1:8080/soap/
看看service有沒有正常出現
http://127.0.0.1:8080/soap/services/listServices
wsdl長得怎麼樣~ 呼叫時也要參考一下~ 貼文件超好用!!
http://127.0.0.1:8080/soap/services/test-service?wsdl
至於如果是對外開放的話~ 那個axis的密碼一定要去改..在檔案下
\apache-tomcat-7.0.0\webapps\soap\WEB-INF\conf\axis2.xml

[AXIS2] 對AXIS平台發soap rpc訊息

當然axis是一個web service提供者~ 自己也要自己測一下有沒有通QQ

以最簡易之RPC message來講, 內容是從.net那隻改過來的~

與.net的差別大概是~ axis的rpc xml有順序~ 丟Map不吃~ 就只好改成List處理, 其實他內建裡面應該是用參數1, 參數2, 參數3...降子代替的~ 而看文章上~ rpc好像也沒規定一定要有name

NameSpace的部分~ axis會直接以package做NameSpace..要注意~

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import java.util.*;

public class TestAxisSample {
EndpointReference targetEPR=new EndpointReference("http://xxx/xxx/services/xxx?wsdl");
public OMElement reqOMElement(List params, String op){
OMFactory fac=OMAbstractFactory.getOMFactory();
OMNamespace omNs=fac.createOMNamespace("http://xx.xxx.xxx.xxx","xs");
OMElement method=fac.createOMElement(op,omNs);

if(params != null && params.size() > 0) {
for(int i = 0 ; i < params.size() ; i++) {
String[] val = (String[])params.get(i);
OMElement param=fac.createOMElement(val[0],omNs);
param.setText(val[1]);
method.addChild(param);
}
}
System.out.println("??method="+method);

return method;
}

public static void main(String[] args){
Properties p = System.getProperties();
p.put("http.proxyHost", "xxx");
p.put("http.proxyPort", "xxx");
try{
TestAxisSample tas = new TestAxisSample();

Options options=new Options();
options.setTo(tas.targetEPR);
ServiceClient sender=new ServiceClient();
sender.setOptions(options);


List mp2 = new Vector();
mp2.add(new String[]{"xxx", "xxx"});
mp2.add(new String[]{"xxx2", "xxx"});
String op2 = "xxx";

OMElement build=tas.reqOMElement(mp2, op2);
OMElement result=sender.sendReceive(build);

System.out.println(result);
} catch(Exception axisFault){
axisFault.printStackTrace();
}
}
}

[AXIS2] 對.net發soap訊息

反正因為某些ooxx的原因~
要去叫.net的webservice..

但是因為axis在製定內容的方式不一樣~所以要改寫一下..
部分內容牽涉實體位置~ 用xxx表示

.net的xml參數~ 似乎不需要排序~ 目前用Map也能被對方接受~

幾個要點CHUNK=false
rpcs.getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, Boolean.FALSE);

另外.net常用xmlns..這個屬性於axis內必須用add atrribute的方式寫入, QName會綁某些東西會建不出來...
OMAttribute attr = fac.createOMAttribute("xmlns", null, "http://tempuri.org/");
element.addAttribute(attr);

import org.apache.axiom.om.*;
import org.apache.axiom.om.util.AXIOMUtil;
import org.apache.axis2.client.*;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.rpc.client.RPCServiceClient;
import javax.xml.namespace.QName;
import java.util.*;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.httpclient.*;

public class Axis2Client {

String PROPERTY_KEY="xxxxx";

OMFactory fac=OMAbstractFactory.getOMFactory();
RPCServiceClient rpcs=null;
EndpointReference er=null;

/**constructor
* @param serverURL set ws server URL*/
public Axis2Client(String serverURL) {
if(serverURL == null) {
serverURL = Property.getBundle().getString(PROPERTY_KEY);
}

try {
er = new EndpointReference(serverURL);
fac=OMAbstractFactory.getOMFactory();
rpcs = new RPCServiceClient();
} catch(Exception e) {
Log.logError(this, "create rpc client error", e);
}
}

/**get .NET webservice (Major) and return OMElement Object of response
* @param serverURL
* @param op
* @param params
* @return String*/
public OMElement getResult(String op, Map params) throws Exception {
rpcs.getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, Boolean.FALSE);
rpcs.getOptions().setAction("http://tempuri.org/"+op);
rpcs.getOptions().setTo(er);

String xml = "<"+op+">";
if(params != null) {
Object[] keys = params.keySet().toArray();
for(int i = 0 ; i < keys.length ; i++) { if(params.get(keys[i]) != null) { String tag = (String)keys[i]; String val = (String)params.get(keys[i]); xml += "<"+tag+">"+val+"";
}
}
}

xml += "";
//System.out.println("??="+xml);
OMElement element = AXIOMUtil.stringToOM(xml);
OMAttribute attr = fac.createOMAttribute("xmlns", null, "http://tempuri.org/");
element.addAttribute(attr);
System.out.println("??method="+element);
OMElement result= rpcs.sendReceive(element);

return result;
}

/**get .NET webservice (Major) and return xml string of response
* @param serverURL
* @param op
* @param params
* @return String*/
public String getResultXML(String op, Map params) throws Exception {
OMElement result = getResult(op, params);
String re = StringEscapeUtils.unescapeXml(result.toString());
return re;
}

/***/
protected void finalize() {
try {
rpcs.cleanup();
rpcs.cleanupTransport();
} catch(Exception e) {}
}

/***/
public void endConnection() {
try {
rpcs.cleanup();
rpcs.cleanupTransport();
} catch(Exception e) {}
}

public static void main(String[] agvs) {
//proxy if need
Properties p = System.getProperties();
p.put("http.proxyHost", "xxx");
p.put("http.proxyPort", "xxx");

String ul = "http://xxx/xxx/WebService/xxx.asmx?WSDL";
Axis2Client ac = new Axis2Client(ul);

String op = "HelloWorld";
Map mp = new HashMap();
mp.put("xx", "xxx");
mp.put("xxx", "xxx");
try {

System.out.println(ac.getResultXML(op, mp));

} catch(Exception e) {
e.printStackTrace();
} finally {
ac.endConnection();
}
}

}

[CSS]排版置中

超久沒更新~ 最近來更新一些最近的心得QQ

萬惡的IE版都排不好~~為了在寬螢幕置中
align=center是不夠低, 那就加上這個吧~

body
{
_text-align:center;
}
#main
{
width:1024px;
margin:0 auto;
_text-align:left;

}