1、产看扩展包
VBoxManage list extpacks
2、卸载扩展包
VBoxManage extpack uninstall "Oracle VM VirtualBox Extension Pack"
3、安装扩展包
VBoxManage extpack install "PATH_TO_EXTENSION_PACK"
Learn and share.
1、产看扩展包
VBoxManage list extpacks
2、卸载扩展包
VBoxManage extpack uninstall "Oracle VM VirtualBox Extension Pack"
3、安装扩展包
VBoxManage extpack install "PATH_TO_EXTENSION_PACK"
#获取已安装模块列表 help("modules") #获取模块说明及帮助信息 help("zlib") #获取模块方法清单 dir("zlib")
1、假设你的程序用到了WebBrowser,程序名为XXX.exe,希望发布时指定WebBrowser的IE版本
2、在注册表指定的位置,新建名为XXX.exe的DWORD值,并按Browser Emulation的值,设置正确的IE版本即可。
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 或 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
3、如果是在VS调试时,需要指定其版本,则要设置VS的程序名,而不是被调试程序的程序名
4、Browser Emulation
Value | Description |
11001 (0x2AF9) | Internet Explorer 11. Webpages are displayed in IE11 edge mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks. |
11000 (0x2AF8) | IE11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 edge mode. Default value for IE11. |
10001 (0x2711) | Internet Explorer 10. Webpages are displayed in IE10 Standards mode, regardless of the !DOCTYPE directive. |
10000 (0x02710) | Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. Default value for Internet Explorer 10. |
9999 (0x270F) | Windows Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks. |
9000 (0x2328) | Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9. Important In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. |
8888 (0x22B8) | Webpages are displayed in IE8 Standards mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks. |
8000 (0x1F40) | Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8. Important In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. |
7000 (0x1B58) | Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control. |
参考:
MSDN
Applet访问本地文件,只需要用私有签名即可搞定。但用JS去调用相同的方法,却返回下面错误:
Exception in thread "Thread-14" java.security.AccessControlException: access denied ("java.io.FilePermission" "C:\TEMP" "read") at java.security.AccessControlContext.checkPermission(Unknown Source) at java.security.AccessController.checkPermission(Unknown Source) at java.lang.SecurityManager.checkPermission(Unknown Source) at java.lang.SecurityManager.checkRead(Unknown Source) at java.io.File.exists(Unknown Source) ......
主要是JS本身不被允许调用本地文件,从而JS调用的Applet方法也就没有权限去做访问本地文件这样的方法了。
为了解决这个问题:
首先,要用Manifest进行权限设置:
Manifest-Version: 1.0 Application-Name: AppletTest Implementation-version: 1.0 Permissions: all-permissions Caller-Allowable-Codebase: * localhost 127.0.0.1 Application-Library-Allowable-Codebase: *
然后,一般来说有两个方案来解决这个问题:
1、通过JS解决:
A、不要直接调用Applet的方法
B、而是用JS操作DOM,生成新的Applet的Tag
C、这样Applet可以在此从init进入,从而获得新的权限,儿不是JS的权限
2、通过AccessController.doPrivileged获取权限来解决:
public String readFile() { final TestContent content = new TestContent(); AccessController.doPrivileged(new PrivilegedAction() { public Object run() { content.text = readFileByLines("test.txt"); return null; } }); return content.text; }
System.Data.OracleClient在FrameWork2中,在VS2010默认为FrameWork4,只要手工用引用
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.OracleClient.dll
就可以了
问题:
Access restriction: The type Handler is not accessible due to restriction on required library xxxx.jar
原因:
MyEclipse运行使用的JDK/JRE,与工程的JDK/JRE不同所致
解决方法:
在项目属性中,JDK/JRE设成默认就好啦
1、Axis2调用WebService一般有两种方法:
a、使用org.apache.axis2.rpc.client.RPCServiceClient自动生成PayLoad
b、使用org.apache.axis2.client.ServiceClient手动生成PayLoad
package com.ats.ws.client; import javax.xml.namespace.QName; 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.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; import org.apache.axis2.rpc.client.RPCServiceClient; import org.apache.log4j.Logger; import com.ats.db.Person; import com.ats.db.PersonAddResponse; public class WSInvoker { private static Logger logger = Logger.getLogger(WSInvoker.class); private static void invokeWebServiceRPC() { try { RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); options.setTo(new EndpointReference("http://localhost:8080/WebService1/services/PersonManager")); // 调用Action QName operation = new QName("http://ws.ats.com", "PersonAdd"); // 调用参数类型和参数值 Person p = new Person(); Object req[] = new Object[] { p }; p.setName("HI"); Class[] reqClasses = new Class[] { PersonAddResponse.class }; // 返回结果 Object[] rsp = serviceClient.invokeBlocking(operation, req, reqClasses); PersonAddResponse r = (PersonAddResponse) rsp[0]; logger.debug(r.getOperationReult()); } catch (AxisFault e) { e.printStackTrace(); } } public static void invokeWebServiceDocument() { try { ServiceClient serviceClient = new ServiceClient(); Options opts = new Options(); opts.setTo(new EndpointReference("http://localhost:8080/WebService1/services/PersonManager")); opts.setAction("urn:PersonAdd"); serviceClient.setOptions(opts); // 发送请求并并得到返回结果 OMElement res = serviceClient.sendReceive(createPayLoad()); logger.debug(res.getFirstElement().getText()); } catch (AxisFault e) { e.printStackTrace(); } } public static OMElement createPayLoad() { OMFactory fac = OMAbstractFactory.getOMFactory(); // 命名空间 OMNamespace omNsXSD = fac.createOMNamespace("http://ws.ats.com", "xsd"); OMNamespace omNsXS = fac.createOMNamespace("http://www.w3.org/2001/XMLSchema", "xs"); // 指定方法 OMElement method = fac.createOMElement("PersonAdd", omNsXSD); // 指定方法的参数 OMElement p1 = fac.createOMElement("person", omNsXS); OMElement personName = fac.createOMElement("personName", omNsXS); personName.setText("personName"); p1.addChild(personName); OMElement personid=fac.createOMElement("personid", omNsXS); personid.setText(""); p1.addChild(personid); method.addChild(p1); return method; } public static void main(String[] args) { WSInvoker.invokeWebServiceRPC(); WSInvoker.invokeWebServiceDocument(); } }
2、要想看到网络通讯的话,在log4j的配置文件中增加:
<category name="org.apache.commons.httpclient"> <priority value="WARN" /> </category> <category name="httpclient.wire"> <priority value="DEBUG" /> </category>
1、发布的几种方式
POJO+axis2-war:
这种方式比较适合简单功能,直接写一个POJO,放到axis2-war下的pojo目录即可
AAR+axis2-war:
这种方式比较适合发布,将服务打成aar包,放到axis2-war下的service目录即可
web+axis2:
这种方式比较适合调试,将axis2集成到web工程,个人比较喜欢这个方式
2、Service组成
a、服务类
PersonManager.java
package com.ats.ws; import com.ats.db.Person; import com.ats.db.PersonAddResponse; import com.ats.db.PersonDAO; public class PersonManager { public PersonAddResponse PersonAdd(Person person) { PersonAddResponse rsp = new PersonAddResponse(); //PersonDAO dao = new PersonDAO(); //rsp.setOperationReult(dao.InsertPerson(person)); return rsp; } }
b、服务描述文件
services/Person/META-INF/services.xml
<?xml version="1.0" encoding="UTF-8"?> <service name="PersonManager"> <description>PersonManagere</description> <parameter name="ServiceClass">com.ats.ws.PersonManager</parameter> <operation name="PersonAdd"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> </service>
c、wsdl
可以自动生成,一般不需要指定
3、Axis2集成到WebApp的方式
a、axis2-web拷贝到project/WebContent下
b、conf、modules、services拷贝到project/WebContent/WEB-INF下
c、所需lib,拷贝到project/WebContent/WEB-INF/lib下
c、web.xml增加下面内容:
<servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>AxisAdminServlet</servlet-name> <servlet-class>org.apache.axis2.webapp.AxisAdminServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/servlet/AxisServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisAdminServlet</servlet-name> <url-pattern>/axis2-admin/*</url-pattern> </servlet-mapping>
1、Car.java
package com.ast.cglib.test; public class Car { }
2、Truck.java
package com.ast.cglib.test; public class Truck extends Car{ }
3、MyInterceptor.java
package com.ast.cglib.test; import java.lang.reflect.Method; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class MyInterceptor implements MethodInterceptor{ @Override public Object intercept(Object invoker, Method method, Object[] args, MethodProxy proxy) throws Throwable { System.out.println("NewCarInterceptor intercept before invoke"); Object result = proxy.invokeSuper(invoker, args); System.out.println("NewCarInterceptor intercept after invoke"); return result; } }
4、MyCallbackFilter.java
package com.ast.cglib.test; import java.lang.reflect.Method; import net.sf.cglib.proxy.CallbackFilter; public class MyCallbackFilter implements CallbackFilter { public int accept(Method method) { if (method.getName().equals("NewTruck")) { return 0; } else { return 1; } } }
5、CarFactory.java
package com.ast.cglib.test; import net.sf.cglib.proxy.Callback; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.NoOp; public class CarFactory{ public Car NewCar() { System.out.println("CarFactory NewCar"); return new Car(); } public Truck NewTruck() { System.out.println("CarFactory NewTruck"); return new Truck(); } public static void EnhancerTest() { Callback[] callbacks = new Callback[] {new MyInterceptor(), NoOp.INSTANCE}; Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(CarFactory.class); enhancer.setCallbacks(callbacks); enhancer.setCallbackFilter(new MyCallbackFilter()); CarFactory fac = (CarFactory)enhancer.create(); //NoOp fac.NewCar(); //MyInterceptor fac.NewTruck(); } public static void main(String[] args) { CarFactory.EnhancerTest(); } }
1、IA1.java
package com.ast.cglib.test; public interface IA1 { void methodA1(); }
2、IA2.java
package com.ast.cglib.test; public interface IA2 { void methodA2(); }
3、A1Impl.java
package com.ast.cglib.test; public class A1Impl implements IA1{ @Override public void methodA1() { System.out.println("A1Impl methodA1"); } }
4、A2Impl.java
package com.ast.cglib.test; public class A2Impl implements IA2{ @Override public void methodA2() { System.out.println("A2Impl methodA2"); } }
5、MixinTest.java
package com.ast.cglib.test; import net.sf.cglib.proxy.Mixin; public class MixinTest { public static void main(String[] args) { Class[] interfaces = new Class[] { IA1.class, IA2.class }; Object[] delegates = new Object[] { new A1Impl(), new A2Impl() }; Object obj = Mixin.create(interfaces, delegates); IA1 a1 = (IA1) obj; a1.methodA1(); IA2 a2 = (IA2) obj; a2.methodA2(); } }