axis和cxf集成Springmvc的使用
一、使用axis用wsdl生成Webservice:
工具:有axis插件的eclipse,wsdl文件;
操作步骤:
新建工程--》选择wsdl文件--》右键选择Webservice--->Generate Java Bean Skeleton
为了自动生成server-config.wsdd文件 需要勾选上图所示地方;
- <ns1:deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" xmlns:ns1="http://xml.apache.org/axis/wsdd/">
- <ns1:globalConfiguration>
- <ns1:parameter name="sendMultiRefs" value="true"/>
- <ns1:parameter name="disablePrettyXML" value="true"/>
- <ns1:parameter name="adminPassword" value="admin"/>
- <ns1:parameter name="attachments.Directory" value="F:\workspace_study\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\htmltest\WEB-INF\attachments"/>
- <ns1:parameter name="dotNetSoapEncFix" value="true"/>
- <ns1:parameter name="enableNamespacePrefixOptimization" value="false"/>
- <ns1:parameter name="sendXMLDeclaration" value="true"/>
- <ns1:parameter name="sendXsiTypes" value="true"/>
- <ns1:parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
- <ns1:requestFlow>
- <ns1:handler type="java:org.apache.axis.handlers.JWSHandler">
- <ns1:parameter name="scope" value="session"/>
- </ns1:handler>
- <ns1:handler type="java:org.apache.axis.handlers.JWSHandler">
- <ns1:parameter name="scope" value="request"/>
- <ns1:parameter name="extension" value=".jwr"/>
- </ns1:handler>
- </ns1:requestFlow>
- </ns1:globalConfiguration>
- <ns1:handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
- <ns1:handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
- <ns1:handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
- <ns1:service name="AdminService" provider="java:MSG">
- <ns1:parameter name="allowedMethods" value="AdminService"/>
- <ns1:parameter name="enableRemoteAdmin" value="false"/>
- <ns1:parameter name="className" value="org.apache.axis.utils.Admin"/>
- <ns1:namespace>http://xml.apache.org/axis/wsdd/</ns1:namespace>
- </ns1:service>
- <ns1:service name="Version" provider="java:RPC">
- <ns1:parameter name="allowedMethods" value="getVersion"/>
- <ns1:parameter name="className" value="org.apache.axis.Version"/>
- </ns1:service>
- <ns1:service name="ImportMaterialServiceHttpPort" provider="java:RPC" style="document" use="literal">
- <ns1:parameter name="allowedMethods" value="*"/>
- <ns1:parameter name="typeMappingVersion" value="1.2"/>
- <ns1:parameter name="wsdlPortType" value="ImportMaterial"/>
- <ns1:parameter name="className" value="com.dayang.ADP.service.ImportMaterialService._0_1.ImportMaterialHttpBindingSkeleton"/>
- <ns1:parameter name="wsdlServicePort" value="ImportMaterialServiceHttpPort"/>
- <ns1:parameter name="schemaQualified" value="http://dayang.com/ADP/schema/ADFileInfoEntity/1.0,http://dayang.com/ADP/schema/ADBroadcastListEntity/1.0,http://dayang.com/ADP/schema/ADPServiceParameterType/0.1,http://dayang.com/ADP/schema/ADMaterialEntity/1.0"/>
- <ns1:parameter name="wsdlTargetNamespace" value="http://dayang.com/ADP/service/ImportMaterialService/0.1"/>
- <ns1:parameter name="wsdlServiceElement" value="ImportMaterialService"/>
- <ns2:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns1:CommonRequestType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.dayang.ADP.schema.ADPServiceParameterType._0_1.CommonRequestType" xmlns:ns1="http://dayang.com/ADP/schema/ADPServiceParameterType/0.1" xmlns:ns2="http://xml.apache.org/axis/wsdd/"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns2:ImportMaterialRequestType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.dayang.ADP.schema.ADPServiceParameterType._0_1.ImportMaterialRequestType" xmlns:ns2="http://dayang.com/ADP/schema/ADPServiceParameterType/0.1"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns3:ADMaterialEntityType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.dayang.ADP.schema.ADMaterialEntity._1_0.ADMaterialEntityType" xmlns:ns3="http://dayang.com/ADP/schema/ADMaterialEntity/1.0"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns4:MaterialServiceParameterResponseType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.dayang.ADP.schema.ADPServiceParameterType._0_1.MaterialServiceParameterResponseType" xmlns:ns4="http://dayang.com/ADP/schema/ADPServiceParameterType/0.1"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns5:ExtendAttributeType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.dayang.ADP.schema.ADMaterialEntity._1_0.ExtendAttributeType" xmlns:ns5="http://dayang.com/ADP/schema/ADMaterialEntity/1.0"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns6:CommonResponseType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.dayang.ADP.schema.ADPServiceParameterType._0_1.CommonResponseType" xmlns:ns6="http://dayang.com/ADP/schema/ADPServiceParameterType/0.1"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns7:ExtendAttributeType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.dayang.ADP.schema.ADPServiceParameterType._0_1.ExtendAttributeType" xmlns:ns7="http://dayang.com/ADP/schema/ADPServiceParameterType/0.1"/>
- <ns1:arrayMapping innerType="ns8:ExtendAttributeType" languageSpecificType="java:com.dayang.ADP.schema.ADMaterialEntity._1_0.ExtendAttributeType[]" qname="ns8:ExtendAttributesType" xmlns:ns8="http://dayang.com/ADP/schema/ADMaterialEntity/1.0"/>
- <ns1:arrayMapping innerType="ns9:ExtendAttributeType" languageSpecificType="java:com.dayang.ADP.schema.ADPServiceParameterType._0_1.ExtendAttributeType[]" qname="ns9:ExtendAttributesType" xmlns:ns9="http://dayang.com/ADP/schema/ADPServiceParameterType/0.1"/>
- </ns1:service>
- <ns1:service name="ImportProgramListServiceHttpPort" provider="java:RPC" style="document" use="literal">
- <ns1:parameter name="allowedMethods" value="*"/>
- <ns1:parameter name="typeMappingVersion" value="1.2"/>
- <ns1:parameter name="wsdlPortType" value="ImportProgramList"/>
- <ns1:parameter name="className" value="MREML2.schema.ImportProgramListService.ImportProgramListHttpBindingSkeleton"/>
- <ns1:parameter name="wsdlServicePort" value="ImportProgramListServiceHttpPort"/>
- <ns1:parameter name="schemaQualified" value="http://MREML2/schema/ProgramListParameter,http://MREML2/schema/CommonDataType,http://MREML2/schema/ProgramList"/>
- <ns1:parameter name="wsdlTargetNamespace" value="http://MREML2/schema/ImportProgramListService"/>
- <ns1:parameter name="wsdlServiceElement" value="ImportProgramListService"/>
- <ns2:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns1:ImportProgramListRequestType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:MREML2.schema.ProgramListParameter.ImportProgramListRequestType" xmlns:ns1="http://MREML2/schema/ProgramListParameter" xmlns:ns2="http://xml.apache.org/axis/wsdd/"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns2:ColumnInfoType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:MREML2.schema.ProgramList.ColumnInfoType" xmlns:ns2="http://MREML2/schema/ProgramList"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns3:BroadcastListEntityType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:MREML2.schema.ProgramList.BroadcastListEntityType" xmlns:ns3="http://MREML2/schema/ProgramList"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns4:ExecuteActionType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:MREML2.schema.ProgramList.ExecuteActionType" xmlns:ns4="http://MREML2/schema/ProgramList"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns5:BroadcastListItemType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:MREML2.schema.ProgramList.BroadcastListItemType" xmlns:ns5="http://MREML2/schema/ProgramList"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns6:ProgramInfoType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:MREML2.schema.ProgramList.ProgramInfoType" xmlns:ns6="http://MREML2/schema/ProgramList"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns7:SignalSourceType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:MREML2.schema.ProgramList.SignalSourceType" xmlns:ns7="http://MREML2/schema/ProgramList"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns8:CommonRequestType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:MREML2.schema.CommonDataType.CommonRequestType" xmlns:ns8="http://MREML2/schema/CommonDataType"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns9:TapeInfoType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:MREML2.schema.ProgramList.TapeInfoType" xmlns:ns9="http://MREML2/schema/ProgramList"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns10:ImportProgramListResponseType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:MREML2.schema.ProgramListParameter.ImportProgramListResponseType" xmlns:ns10="http://MREML2/schema/ProgramListParameter"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns11:ExtendAttributeType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:MREML2.schema.CommonDataType.ExtendAttributeType" xmlns:ns11="http://MREML2/schema/CommonDataType"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns12:ChannelInfoType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:MREML2.schema.ProgramList.ChannelInfoType" xmlns:ns12="http://MREML2/schema/ProgramList"/>
- <ns1:typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns13:CommonResponseType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:MREML2.schema.CommonDataType.CommonResponseType" xmlns:ns13="http://MREML2/schema/CommonDataType"/>
- <ns1:arrayMapping innerType="ns14:ExtendAttributeType" languageSpecificType="java:MREML2.schema.CommonDataType.ExtendAttributeType[]" qname="ns14:ExtendAttributesType" xmlns:ns14="http://MREML2/schema/CommonDataType"/>
- </ns1:service>
- <ns1:transport name="http">
- <ns1:requestFlow>
- <ns1:handler type="URLMapper"/>
- <ns1:handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
- </ns1:requestFlow>
- <ns1:parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>
- <ns1:parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
- <ns1:parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler"/>
- <ns1:parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/>
- <ns1:parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
- <ns1:parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
- </ns1:transport>
- <ns1:transport name="local">
- <ns1:responseFlow>
- <ns1:handler type="LocalResponder"/>
- </ns1:responseFlow>
- </ns1:transport>
- </ns1:deployment>
server-config.wsdd
Web.xml中会相应生成相关代码:
- <servlet>
- <display-name>Apache-Axis Servlet</display-name>
- <servlet-name>AxisServlet</servlet-name>
- <servlet-class>org.apache.axis.transport.http.AxisServlet</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>
- <display-name>Axis Admin Servlet</display-name>
- <servlet-name>AdminServlet</servlet-name>
- <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
- <load-on-startup>100</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>AdminServlet</servlet-name>
- <url-pattern>/servlet/AdminServlet</url-pattern>
- </servlet-mapping>
启动工程,访问http:ip:port/name/services,发布成功;
二、使用cxf集成springmvc发布Webservice:
工具:cxf-2.4.1 eclipse wsdl spingmvc
使用cxf中的wsdl2java命令生成java文件:
wsdl2java用法:
wsdl2java -p com -d src -all aa.wsdl
-p 指定其wsdl的命名空间,也就是要生成代码的包名:
-d 指定要产生代码所在目录
-client 生成客户端测试web service的代码
-server 生成服务器启动web service的代码
-impl 生成web service的实现代码
-ant 生成build.xml文件
-all 生成所有开始端点代码:types,service proxy,,service interface, server mainline, client mainline, implementation object, and an Ant build.xml file.
生成的java文件导入到工程中,添加spring依赖,依赖文件如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- -->
- <ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
- <info
- organisation=""
- module="adagent"
- status="integration">
- </info>
- <configurations>
- <conf name="default" visibility="public" description="runtime dependencies and master artifact can be used with this conf" extends="runtime,master"/>
- <conf name="master" visibility="public" description="contains only the artifact published by this module itself, with no transitive dependencies"/>
- <conf name="compile" visibility="public" description="this is the default scope, used if none is specified. Compile dependencies are available in all classpaths."/>
- <conf name="provided" visibility="public" description="this is much like compile, but indicates you expect the JDK or a container to provide it. It is only available on the compilation classpath, and is not transitive."/>
- <conf name="runtime" visibility="public" description="this scope indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath." extends="compile"/>
- <conf name="test" visibility="private" description="this scope indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases." extends="runtime"/>
- <conf name="system" visibility="public" description="this scope is similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository."/>
- <conf name="sources" visibility="public" description="this configuration contains the source artifact of this module, if any."/>
- <conf name="javadoc" visibility="public" description="this configuration contains the javadoc artifact of this module, if any."/>
- <conf name="optional" visibility="public" description="contains all optional dependencies"/>
- </configurations>
- <dependencies>
- <!--spring-->
- <dependency org="org.springframework" name="spring-core" rev="4.0.4.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.springframework" name="spring-beans" rev="4.0.4.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.springframework" name="spring-web" rev="4.0.4.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.springframework" name="spring-context" rev="4.0.4.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.springframework" name="spring-context-support" rev="4.0.4.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.springframework" name="spring-aop" rev="4.0.4.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.springframework" name="spring-expression" rev="4.0.4.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.springframework" name="spring-tx" rev="4.0.4.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.springframework" name="spring-jms" rev="4.0.4.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.springframework" name="spring-jdbc" rev="4.0.4.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.springframework" name="spring-webmvc" rev="4.0.4.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.slf4j" name="slf4j-api" rev="1.7.7" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.slf4j" name="jcl-over-slf4j" rev="1.7.7" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.slf4j" name="jul-to-slf4j" rev="1.7.7" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.slf4j" name="log4j-over-slf4j" rev="1.7.7" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="ch.qos.logback" name="logback-classic" rev="1.1.2" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="ch.qos.logback" name="logback-core" rev="1.1.2" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <!--json序列化-->
- <dependency org="com.fasterxml.jackson.core" name="jackson-core" rev="2.3.1" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="com.fasterxml.jackson.core" name="jackson-annotations" rev="2.3.1" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="com.fasterxml.jackson.core" name="jackson-databind" rev="2.3.1" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <!--HTTP-->
- <dependency org="org.aopalliance" name="com.springsource.org.aopalliance" rev="1.0.0" />
- <dependency org="org.springframework.data" name="spring-data-commons" rev="1.10.0.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.apache.httpcomponents" name="httpclient" rev="4.3.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.apache.httpcomponents" name="httpcore" rev="4.3.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.apache.httpcomponents" name="httpmime" rev="4.3.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.apache.ws.xmlschema" name="xmlschema-core" rev="2.1.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <!--cxf-->
- <dependency org="org.apache.cxf" name="cxf-bundle" rev="2.7.11" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.apache.neethi" name="neethi" rev="3.0.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.apache.velocity" name="velocity" rev="1.7" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.apache.ws.xmlschema" name="xmlschema-core" rev="2.1.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="javax.xml.bind" name="jaxb-api" rev="2.2.4" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="javax.xml.soap" name="saaj-api" rev="1.3.5" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="com.sun.xml.bind" name="jaxb-xjc" rev="2.2.7" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="com.sun.xml.bind" name="jaxb-core" rev="2.2.7" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="com.sun.xml.messaging.saaj" name="saaj-impl" rev="1.3.23" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.codehaus.woodstox" name="woodstox-core-asl" rev="4.3.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.codehaus.woodstox" name="stax2-api" rev="3.1.4" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.jvnet.staxex" name="stax-ex" rev="1.7.7" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.codehaus.jettison" name="jettison" rev="1.3.5" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="wsdl4j" name="wsdl4j" rev="1.6.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <!-- axis相关内容 -->
- <dependency org="axis" name="axis" rev="1.4" conf="compile->compile(*),master(*);runtime->runtime(*)" />
- <dependency org="axis" name="axis-jaxrpc" rev="1.4" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false" />
- <dependency org="axis" name="axis-saaj" rev="1.4" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false" />
- <dependency org="axis" name="axis-wsdl4j" rev="1.5.1" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false" />
- <dependency org="commons-discovery" name="commons-discovery" rev="0.2" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false" />
- <dependency org="com.google.code.gson" name="gson" rev="2.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="dom4j" name="dom4j" rev="1.6.1" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <!--
- <dependency org="org.apache.axis" name="axis" rev="1.4" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- -->
- <dependency org="jaxen" name="jaxen" rev="1.1-beta-9" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="javax.validation" name="validation-api" rev="1.1.0.Final" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false" />
- <dependency org="javax.ws.rs" name="javax.ws.rs-api" rev="2.0-m10" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.springframework.data" name="spring-data-mongodb" rev="1.7.0.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.mongodb" name="mongo-java-driver" rev="3.0.0-rc1" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.apache.solr" name="solr-solrj" rev="5.1.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="org.apache.commons" name="commons-vfs2" rev="2.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="commons-discovery" name="commons-discovery" rev="0.5" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="commons-logging" name="commons-logging" rev="1.2" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- <dependency org="javax.xml.rpc" name="javax.xml.rpc-api" rev="1.1" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
- </dependencies>
- </ivy-module>
ivy.xml
Web.xml文件添加代码:
- <servlet>
- <servlet-name>CXFService</servlet-name>
- <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>CXFService</servlet-name>
- <url-pattern>/*</url-pattern>
- </servlet-mapping>
spring的beans文件添加如下代码:
- <bean id="WebServiceBean" class="org.tempuri.WebserviceSoapImpl"></bean>
- <jaxws:server id="WebServiceSoap"
- serviceClass="org.tempuri.WebServiceSoap" address="/WebService.asmx">
- <jaxws:serviceBean>
- <ref bean="WebServiceBean"/>
- </jaxws:serviceBean>
- </jaxws:server>
以上可实现webservice的发布;
三、使用cxf发布restful接口:
添加代码:
- import javax.ws.rs.GET;
- import javax.ws.rs.Path;
- import javax.ws.rs.Produces;
- import javax.ws.rs.core.MediaType;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.mongodb.core.MongoTemplate;
- import org.springframework.stereotype.Component;
- @Path("/test")
- @Produces(MediaType.APPLICATION_JSON)
- @Component("cxfRestfulRS")
- public class CxfRestfulRS {
- private static final Logger logger = LoggerFactory.getLogger(CxfRestfulRS.class);
- @Autowired
- MongoTemplate mongoTemplate;
- @GET
- @Path(value = "/check")
- public String check() {
- try {
- System.out.println("服务运行正常...");
- } catch (Throwable e) {
- logger.error(e.getMessage());
- logger.debug(e.getMessage(), e);
- }
- return "服务运行正常...";
- }
- @Path(value = "/add")
- @GET
- public void add() {
- try {
- TestMo mo = new TestMo();
- mo.setId("1111");
- mo.setMessage("2222");
- mo.setName("3333");
- mongoTemplate.insert(mo);
- } catch (Throwable e) {
- logger.error(e.getMessage());
- logger.debug(e.getMessage(), e);
- }
- }
- }
CxfRestfulRS.java
添加beans配置:
- <jaxrs:server id="webService" address="/">
- <!--输入拦截器设置-->
- <jaxrs:inInterceptors>
- </jaxrs:inInterceptors>
- <!--输出拦截器设置-->
- <jaxrs:outInterceptors>
- </jaxrs:outInterceptors>
- <!--serviceBeans:暴露的WebService服务类-->
- <jaxrs:serviceBeans>
- <ref bean="cxfRestfulRS"/>
- </jaxrs:serviceBeans>
- <!--支持的协议-->
- <jaxrs:extensionMappings>
- <entry key="json" value="application/json"/>
- <entry key="xml" value="application/xml"/>
- </jaxrs:extensionMappings>
- </jaxrs:server>
beans.xml完整文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:util="http://www.springframework.org/schema/util"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:jaxws="http://cxf.apache.org/jaxws"
- xmlns:jaxrs="http://cxf.apache.org/jaxrs"
- xmlns:mongo="http://www.springframework.org/schema/data/mongo"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
- http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
- http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.5.xsd
- http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository-1.5.xsd
- http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
- http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
- <!-- 自动扫描 -->
- <context:annotation-config />
- <mvc:annotation-driven />
- <context:component-scan base-package="com.ad" />
- <context:property-placeholder location="classpath:com/ad/mongodb.properties" />
- <!--
- <mongo:mongo id="mongo" host="${mongodb.host}" port="${mongodb.port}" />
- -->
- <mongo:mongo id="mongo" replica-set="${mongodb.replicaSet}" />
- <mongo:db-factory id="mongoDbFactory" dbname="${mongodb.database}"
- mongo-ref="mongo" />
- <!-- mongo模板操作对象 -->
- <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
- <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
- </bean>
- <bean id="WebServiceBean" class="org.tempuri.WebserviceSoapImpl"></bean>
- <jaxws:server id="WebServiceSoap"
- serviceClass="org.tempuri.WebServiceSoap" address="/WebService.asmx">
- <jaxws:serviceBean>
- <ref bean="WebServiceBean"/>
- </jaxws:serviceBean>
- </jaxws:server>
- <jaxrs:server id="webService" address="/">
- <!--输入拦截器设置-->
- <jaxrs:inInterceptors>
- </jaxrs:inInterceptors>
- <!--输出拦截器设置-->
- <jaxrs:outInterceptors>
- </jaxrs:outInterceptors>
- <!--serviceBeans:暴露的WebService服务类-->
- <jaxrs:serviceBeans>
- <ref bean="cxfRestfulRS"/>
- </jaxrs:serviceBeans>
- <!--支持的协议-->
- <jaxrs:extensionMappings>
- <entry key="json" value="application/json"/>
- <entry key="xml" value="application/xml"/>
- </jaxrs:extensionMappings>
- </jaxrs:server>
- </beans>
Web.xml完整文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
- <display-name>ADAgent</display-name>
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- </welcome-file-list>
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/spring-beans.xml</param-value>
- </context-param>
- <context-param>
- <param-name>logConfigFile</param-name>
- <param-value>config/logback.xml</param-value>
- </context-param>
- <context-param>
- <param-name>propertiesFiles</param-name>
- <param-value>config/adagent.properties</param-value>
- </context-param>
- <listener>
- <listener-class>com.ad.main.SpringWebMain</listener-class>
- </listener>
- <!--
- <servlet>
- <servlet-name>springmvc</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:com/ad/beans.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>springmvc</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- -->
- <servlet>
- <servlet-name>CXFService</servlet-name>
- <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>CXFService</servlet-name>
- <url-pattern>/*</url-pattern>
- </servlet-mapping>
- <servlet>
- <display-name>Apache-Axis Servlet</display-name>
- <servlet-name>AxisServlet</servlet-name>
- <servlet-class>org.apache.axis.transport.http.AxisServlet</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>
- <display-name>Axis Admin Servlet</display-name>
- <servlet-name>AdminServlet</servlet-name>
- <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
- <load-on-startup>100</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>AdminServlet</servlet-name>
- <url-pattern>/servlet/AdminServlet</url-pattern>
- </servlet-mapping>
- </web-app>
- package com.ad.main;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.IOException;
- import java.util.Enumeration;
- import java.util.Properties;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletContextEvent;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.context.ApplicationContext;
- import org.springframework.util.StringUtils;
- import org.springframework.web.context.ContextLoaderListener;
- import com.LoggerConfigurator;
- public class SpringWebMain extends ContextLoaderListener {
- protected static final String INIT_PARAM_HOMEDIR = "homeDirectory";
- protected static final String INIT_PARAM_LOGCONFIGFILE = "logConfigFile";
- protected static final String INIT_PARAM_PROPERTIESFILES = "propertiesFiles";
- protected static final String SYS_PPT_APPHOME = "app.home";
- protected static final Logger logger = LoggerFactory
- .getLogger(SpringWebMain.class);
- public static <T> T getBean(Class<T> requiredType) {
- ApplicationContext ac = ContextLoaderListener
- .getCurrentWebApplicationContext();
- if (ac != null) {
- return ac.getBean(requiredType);
- } else {
- throw new org.springframework.context.ApplicationContextException(
- "ApplicationContext has not been set.");
- }
- }
- public static <T> T getBean(String name, Class<T> requiredType) {
- ApplicationContext ac = ContextLoaderListener
- .getCurrentWebApplicationContext();
- if (ac != null) {
- return ac.getBean(name, requiredType);
- } else {
- throw new org.springframework.context.ApplicationContextException(
- "ApplicationContext has not been set.");
- }
- }
- @Override
- public void contextDestroyed(ServletContextEvent event) {
- org.slf4j.bridge.SLF4JBridgeHandler.uninstall();
- super.contextDestroyed(event);
- }
- @Override
- public void contextInitialized(ServletContextEvent event) {
- ServletContext sc = event.getServletContext();
- initialize(sc);
- super.contextInitialized(event);
- }
- protected String getLogbackConfigFileName() {
- return null;
- }
- protected String[] getPropertiesFileNames() {
- return new String[] {};
- }
- private String getLogbackConfigFileName(ServletContext servletContext) {
- String cfn = servletContext.getInitParameter(INIT_PARAM_LOGCONFIGFILE);
- if (StringUtils.hasLength(cfn)) {
- return cfn;
- } else {
- return this.getLogbackConfigFileName();
- }
- }
- private String[] getPropertiesFileNames(ServletContext servletContext) {
- String ppfs = servletContext
- .getInitParameter(INIT_PARAM_PROPERTIESFILES);
- if (StringUtils.hasLength(ppfs)) {
- return ppfs.split(";");
- } else {
- return this.getPropertiesFileNames();
- }
- }
- protected void initialize(ServletContext servletContext) {
- String appname = servletContext.getServletContextName();
- String homedir_ppt_name = appname + ".home";
- String homedir = servletContext.getInitParameter(INIT_PARAM_HOMEDIR);
- if (!StringUtils.hasText(homedir)) {
- homedir = System.getProperty(homedir_ppt_name);
- }
- if (!StringUtils.hasText(homedir)) {
- homedir = System.getenv(appname + "_home");
- }
- if (!StringUtils.hasText(homedir)) {
- homedir = ".";
- logger.warn("未找到" + homedir_ppt_name + ",请正确配置,否则系统将无法正常运行!");
- logger.warn("暂时将" + homedir_ppt_name + "的值设置为当前目录!");
- }
- // 强制加入System,以便logback等其他配置使用
- System.setProperty(homedir_ppt_name, homedir);
- System.setProperty(SYS_PPT_APPHOME, homedir);
- // 日志处理
- System.setProperty("org.apache.cxf.Logger",
- "org.apache.cxf.common.logging.Slf4jLogger");
- if (!org.slf4j.bridge.SLF4JBridgeHandler.isInstalled()) {
- org.slf4j.bridge.SLF4JBridgeHandler.install();
- }
- File logcf = new File(homedir, getLogbackConfigFileName(servletContext));
- logger.info("加载日志配置文件:{}", logcf.getAbsolutePath());
- LoggerConfigurator.config(logcf.getAbsolutePath());
- // 加载配置文件
- for (String str : getPropertiesFileNames(servletContext)) {
- if (StringUtils.hasLength(str)) {
- loadProperties(homedir + "/" + str);
- }
- }
- }
- private void loadProperties(String filename) {
- File file = new File(filename);
- if (!file.exists()) {
- logger.warn("未找到文件:" + filename + ",请正确配置,否则系统将无法正常运行!");
- return;
- }
- logger.info("加载配置文件:{}", file.getAbsolutePath());
- Properties ppts = new Properties();
- try {
- ppts.load(new FileReader(file));
- } catch (FileNotFoundException e) {
- logger.error("未找到文件:" + filename + ",请正确配置,否则系统将无法正常运行!");
- } catch (IOException e) {
- logger.error("加载文件:" + filename + ",请正确配置,否则系统将无法正常运行!");
- }
- // 插入到System.Properties
- for (Enumeration<?> e = ppts.propertyNames(); e.hasMoreElements();) {
- String key = (String) e.nextElement();
- System.setProperty(key, ppts.getProperty(key));
- }
- }
- }
SpringWebMain
- package com;
- import org.slf4j.LoggerFactory;
- import ch.qos.logback.classic.LoggerContext;
- import ch.qos.logback.classic.joran.JoranConfigurator;
- import ch.qos.logback.core.joran.spi.JoranException;
- import ch.qos.logback.core.util.StatusPrinter;
- public class LoggerConfigurator {
- public static void config(String logbackCfg) {
- LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
- try {
- JoranConfigurator configurator = new JoranConfigurator();
- configurator.setContext(lc);
- // the context was probably already configured by default
- // configuration rules
- lc.reset();
- configurator.doConfigure(logbackCfg);
- } catch (JoranException je) {
- // StatusPrinter will handle this
- }
- StatusPrinter.printIfErrorsOccured(lc);
- }
- }
LoggerConfigurator.java
axis和cxf集成Springmvc的使用的更多相关文章
- WebService流行框架之Axis和CXF
转自:http://www.cnblogs.com/snake-hand/archive/2013/06/09/3129915.html 前言 上节课我们对WebService进行了简单的介绍,对于其 ...
- CXF集成Spring实现webservice的发布与请求
CXF集成Spring实现webservice的发布(服务端) 目录结构: 主要代码: package com.cxf.spring.pojo; public class User { int id ...
- Quartz集成springMVC 的方案二(持久化任务、集群和分布式)
Quartz是一个开放源码项目,专注于任务调度器,提供了极为广泛的特性如持久化任务,集群和分布式任务等. Quartz核心是调度器,还采用多线程管理. 1.持久化任务:当应用程序停止运行时,所有调度信 ...
- Quartz集成springMVC 的方案一
Quartz是一个开放源码项目,专注于任务调度器. springMVC 具体的搭建框架就不具体说明,接下来直接描述把Quartz集成到springMVC 框架中. 步骤: 1.引入所需要的jar包 2 ...
- tinyweb集成springmvc 的一种可行方式
最近tiny项目中集成了springmvc,而且使用的tiny的版本比较低,所以整合起来官网给的前两种方式都行不通. 而且有个tiny整合springmvc的maven依赖都下载不了.所以只有使用第三 ...
- 一个CXF集成SPRING的WEBSERVICE完整实例
1 首先准备以下JAR包 activation.jar commons-logging-1.1.1.jar cxf-2.5.6.jar jaxb-api-2.2.1.jar jaxb-impl-2.1 ...
- (第04节)集成SpringMVC框架
在上一节的基础上集成spring_mvc 首先添加依赖文件 <properties> <javax.servlet.version>4.0.0</javax.servle ...
- 集成SpringMVC, Spring, Mybatis环境
web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app version=" ...
- IntelliJ IDEA 使用maven 集成SpringMVC+Hibernate
准备工作: 安装idea intellij 安装jdk1.8,配好环境变量 安装tomcat 7 准备工作完成之后,就开始创建项目了 创建项目 1.File–>new project–>选 ...
随机推荐
- 新的表格展示利器 Bootstrap Table Ⅱ
上一篇文章介绍了Bootstrap Table的基本知识点和应用,本文针对上一篇文章中未解决的文件导出问题进行分析,同时介绍BootStrap Table的扩展功能,当行表格数据修改. 1.B ...
- 解析:type t_string is table of varchar2(32767) index by binary_integer
@ 理解一: table 相当于是数组,这里定义了一个数组类型t_string; INDEX BY BINARY_INTEGER这里是定义数组下标是整数,因为ORACLE中下标可以是字符串. VARC ...
- RPC框架实现思路浅析
第一部分,设计分析 远程调用要解决的主要问题: 1,序列化 : 如何将对象转化为二进制数据进行传输,如何将二进制数据转化对象 2,数据的传输(协议,第三方框架) 3,服务的注册/发现,单点故障,分布式 ...
- Begin the new life as a coder
今天刚刚开通博客园的博客频道,这里将成为自我成长点滴记录的土壤!从今天开始,从这篇博文开始,我将分享自己从一个fresher开始的成长经历.原与广大仁人志士共同在程序中共享快乐!我真是太高兴了 :D
- ios 初体验<UIButton 控件>
1.创建UIButton 跟其他方式不同,不是直接alloc,init 创建 用工厂化方式创建 UIButton *sureBtn = [UIButton buttonWithType:UIButto ...
- WPF--鼠标右键菜单中的Command命令实现
一个功能,在ListView中的ListBoxItem控件上实现右键菜单关闭选项,将该ListBoxItem从ListView中删除. 利用 RoutedCommand类创建Command命令,MSD ...
- GUI线程 :打字母游戏
代码: /** * */ package com.niit.syntronized; import java.awt.Color; import java.awt.FlowLayout; import ...
- 个人作业3——个人总结(Alphe)
小结: 1.软件工程的第一阶段终于结束了,说实话,每个人的课程都很紧张,在这么紧张的时期我们都每周抽出一些时间来开个小会总结或者计划软件工程的相关任何非常难得,大家的态度都诚恳认真,我亦是如此,只是我 ...
- 团队作业3-需求改进&原型设计
选题:实验室报修系统 实验室设备经常会发生这样或那样的故障,靠值班人员登记设备故障现象,维护人员查看故障记录,进行维修,然后登记维修过程与内容,以备日后复查,用这种方式进行设备运营管理,它仅仅起到一个 ...
- 201521123050 《Java程序设计》第6周学习总结
1. 本周学习总结 2. 书面作业 1.clone方法 1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么? 答:(1)x.clone ...