先是 調用測試端代碼:
SimDesignVariable[] designValue = new SimDesignVariable[1000];
designValue[0] = new SimDesignVariable("psSpringXIn",0.0);
designValue[1] = new SimDesignVariable("psSpringYIn",0.0);
designValue[2] = new SimDesignVariable("psSpringZIn",0.0);
designValue[3] = new SimDesignVariable("psSpringXOut",0.0);
designValue[4] = new SimDesignVariable("psSpringYout",0.0);
designValue[5] = new SimDesignVariable("psSpringZout", 0);
designValue[6] = new SimDesignVariable("ssSpringX",0.0);
designValue[7] = new SimDesignVariable("ssSpringY",0.0);
designValue[8] = new SimDesignVariable("ssSpringZ",0.0);
// 另一個定長對象數組
SimObjectiveFunction[] obfunctionValue = new SimObjectiveFunction[100];
obfunctionValue[0] = new SimObjectiveFunction("WzY",0.0);
obfunctionValue[1] = new SimObjectiveFunction("WzZ",0.0);
obfunctionValue[2] = new SimObjectiveFunction("Vcr",0.0);
String targetEendPoint = "http://166.22.55.102:8080/axis/services/SimCallOptXml?wsdl";
Object result = new Object();
// System.out.println(order.isChecked());
try {
Service service = new Service();
Call call = (Call) service.createCall();
QName qn = new QName("urn:SimCallOptXml", "Orde");
QName qn22 = new QName("urn:SimCallOptXml", "Order");
call.registerTypeMapping(SimDesignVariable.class, qn,
new org.apache.axis.encoding.ser.BeanSerializerFactory(
SimDesignVariable.class, qn),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(
SimDesignVariable.class, qn));
call.registerTypeMapping(SimObjectiveFunction.class, qn22,
new org.apache.axis.encoding.ser.BeanSerializerFactory(
SimObjectiveFunction.class, qn22),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(
SimObjectiveFunction.class, qn22));
call.setTargetEndpointAddress(new java.net.URL(targetEendPoint));
call.setOperationName(new QName("SimCallOptXml", "procress"));
System.out.println("Success...");
call.addParameter("arg1", qn, ParameterMode.IN);
call.addParameter("arg2", qn22, ParameterMode.IN);
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
result = (String) call.invoke(new Object[] { designValue, obfunctionValue });
}
catch (AxisFault fault) {
result = "Error is: " + fault.toString();
}
catch (IOException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
}
上面比較重要的就是怎樣添加兩種供 Call識別的 參數類型(SimDesignVariable類, 和SimObjectiveFunction類)
被調用的SimCallOptXml類 中 procress(SimDesignVariable[ ] degsign, SimObjectiveFunction[ ] obfunctionValue)
在發佈服務的描述文件server-config.wsdd 中的片段:
<service name="SimCallOptXml" provider="java:RPC">
<parameter name="allowedMethods" value="procress"/>
<parameter name="className" value="objectTest.simCallOpt.SimCallOptXml"/>
<beanMapping languageSpecificType="java:objectTest.simCallOpt.SimDesignVariable" qname="ns3:SimDesignVariable" xmlns:ns3="urn:SimCallOptXml"/>
<beanMapping languageSpecificType="java:objectTest.simCallOpt.SimObjectiveFunction" qname="ns3:SimObjectiveFunction" xmlns:ns3="urn:SimCallOptXml"/>
</service>
主要是多添加了一個 beanMapping 標籤。