① java怎么在服务器上部署webservice
是你自己写的一个web文件网页服务吗,weblogic上可以部署web服务的,安装weblogic11g并且配置jdk1.6就可以了。
② 怎么部署webservice服务
工具/原料
IIS
Visual Studio
方法/步骤
在 控制面板->程序和功能->打开或关闭Windows功能.找到 "Internet 信息服务",并将其子集全部打上勾.
这里的 Internet 信息服务 的英文缩写 其实就是 IIS .
这一步操作其实就相当于是开启了 IIS 功能.
在开启 IIS 后,到 控制面板->管理工具->Internet信息服务(IIS)管理器,双击打开一个新的控制面板.
找到 网站->Default Web Site->添加应用程序
填写应用程序的别名,应用程序池默认就可以,物理路径选择上篇文章中建立Webservice时所保存的路径.
到这里还有一步操作. 点击 "连接为" 按钮
选择 特定用户, 点击右边的 "设置" 按钮 , 填写凭据信息,这里填写你电脑的用户名跟密码,用户名一般默认都是 administrator
填写好证据后,点击 "测试设置" 按钮. 在测试连接里面,如果 "身份验证"跟"授权"前面都打了绿色的勾,那么说明配置成功.
这一步是对于 IIS 访问权限的配置.也就是获得系统管理员权限.
找到 IIS 选项里面的 "目录浏览" , 双击打开新面板.
点击选择最右边侧面的 "启用" 按钮.
这里的启用可以让我们有浏览应用程序内部文件目录的权限.
点击右侧的 浏览应用程序
在后面加上我们上一篇文章里新添加的 "一般处理程序" Handler1.ashx
就可以访问到我们刚发布到 IIS 的网站.
③ 如何将用myeclipse开发的webservice的工程部署到tomcat上
在项目名上点击右键,选择“导出”;
在弹出来的对话框中,你可以直接搜索“WAR”或者一个一个查看,应该就在“Web”里面,选定“WAR file”,然后“下一步”;
注意导出的文件是以".war"为文件后缀的;
然后把你导出的这个war文件拷贝到tomcat的安装目录下,直接把这个war文件放在webapps这个文件夹里面就可以了!
然后运行tomcat服务,可以命令行也可以通过service运行,具体看你的tomcat是怎么安装的;
通过浏览器访问“http://127.0.0.1:8080/<你的webService项目名>”就可以了!
tomcat运行过程中会自动把webapps文件夹中的war文件解压缩成相应的文件夹,你运行tomcat后可以再去看看webapps文件夹,里面肯定会多了一个你的webservice项目文件夹。
④ xp sp3 安装完IIS后,如何部署WebService
打开IIS企业管理器右击默认网站选择新建-虚拟目录下一步别名(假如起名字为webservice)选择在(VS2010创建Webservice程序)中的保存的路径webservice然后下一步直到完成打开浏览器输入Service1.asmx可以访问就证明成功了
⑤ 如何用axis的wsdd方法部署WebService
编写 deploy.wsdd 文件
放置于 %Tomcat_Home%\webapps\axis\WEB-INF 中
内容如下
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="WSDD" provider="java:RPC">
<parameter name="className" value="com.caimaoy" />
<!-- * 代表所有的方法都暴露 -->
<parameter name="allowedMethods" value="*" />
<parameter name="scope" value="request" />
</service>
</deployment>
service标签代表一个WebService服务,HelloWorldWSDD就是当前WebService的名称
provider是java的WebService类型,分别有: RPC、Document、Wrapped、Message、EJB、RMI
有兴趣的可以看看org.apache.axis.providers.java包下面的WebService的实现类或是文档
parameter的参数className代表当前WebService的class类路径
allowedMethods代表暴露的方法,那些方法在客户端可以调用;
这个是当前WebService的作用域,它有3个值,分别是:request、session、application
request代表为每个WebService SOAP的请求都产生一个服务对象,和Spring的scope很像,在服务请求频繁的话会消耗很多资源
session 是给每个调用当前WebService的客户端创建一个服务对象
application 是个当前所有的请求创建一个服务对象
发布 WebService
写完配置后,就需要用axis提供的AdminClient工具类帮我们发布WebService,直到生成server-config.wsdd
步骤如下:
启动Tomcat
运行cmd命令,然后进入当前工程发布的目录,即%tomcat_home%/webapps/project/WEB-INF
输入命令
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -p 8082 -s /axis/servlet/AxisServlet deploy.wsdd
-p 表示端口Tomcat端口号,AdminClient 默认为__8080__
这里的deploy.wsdd是我们刚才定制的wsdd文件,java当然是jvm的命令
-Djava.ext.dirs=lib设置当前命令的依赖包
AdminClient是axis提供的工具类,这个类本来是可以在官方的工程中admin可以直接运行的(这里不可以,下载下来的少了AdminServlet,有兴趣的可以研究下,就是前面说的官方的示例);
如果运行命令后,看到:
Processing file deploy.wsdd
<Admin>Done processing</Admin>
就代表快成功了,why?快!看看deploy.wsdd同级目录有没有生成server-config.wsdd如果有这个文件就成功了,没有就失败了
如果失败了还有解决办法,首先你得启动tomcat,将我们的工程发布出去。然后在重复上面的命令,不行就换命令行代码如下:
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/AxisWebService/services/AdminService deploy.wsdd
-lhttp://localhost:8080/AxisWebService/services/AdminService是因为你的端口可能被axis占用了,我们将指定AdminService来完成转换,运行上面命令就没有问题了。
WebService 客户端
我这里只说一种客户端的实现方法,在网上看了好像有超过6种以上的方法
大概的代码如下:
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
public class TestClient {
public static void main(String [] args) {
try {
String endpoint = "http://caimaoy.com/axis/services/WSDD?wsdl=1&test=test";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint) );
call.setOperationName(new QName("http://soapinterop.org/", "querySingle"));
String ret = (String) call.invoke(new Object[] { "Hello!" } );
System.out.println("got:" + ret);
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
FAQ
提问:如果我出现了 java.lang.reflect.InvocationTargetException 这样的异常如何处理?
回答:这是映射出错,我遇到的情况是在 %Tomcat_Home%\webapps\axis\WEB-INF 中添加缺失是jar包
提问:作为一个WebService能够获取到客户端的IP、请求的requestString吗?
回答:可以大概的获取方式如下,获取到了 HttpServletRequest requsest,也就有了想要的东西了
import javax.servlet.http.HttpServletRequest;
import org.apache.axis.MessageContext;
import org.apache.axis.transport.http.HTTPConstants;
public class HelloWorld {
public String getClientInfo(String asYouLike) {
/* get HttpRequest*/
MessageContext mc = null;
HttpServletRequest request = null;
try {
//mc = MessageContext.getCurrentMessageContext();
mc = MessageContext.getCurrentContext();
if (mc == null)
throw new Exception("无法获取到MessageContext");
request = (HttpServletRequest) mc.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
System.out.println("remote ip: " + request.getRemoteAddr());
System.out.println("request URI: " + request.getRequestURI());
System.out.println("quesryString : " + request.getQueryString());
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
⑥ 如何发布一个webservice服务
(1)webservice写好后部署在tomcat或者其他服务器就等于是发布了
(2)web.xml的配置如下(不过这个文件是建Web Service Project时MyEclipse会自动配置的)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>WebServices</servlet-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
</servlet>
<servlet>
<servlet-name>SOAPMonitorService</servlet-name>
<servlet-class>
org.apache.axis.monitor.SOAPMonitorService
</servlet-class>
<init-param>
<param-name>SOAPMonitorPort</param-name>
<param-value>5001</param-value>
</init-param>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>
org.apache.axis.transport.http.AdminServlet
</servlet-class>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SOAPMonitorService</servlet-name>
<url-pattern>/SOAPMonitor</url-pattern>
</servlet-mapping>
<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>WebServices</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>WebServices</servlet-name>
<url-pattern>/WebServices/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
(3)server-config.wsdd是配置服务用的,也就是配置你写的Web Service,我放个例子供你参考
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<parameter name="adminPassword" value="admin" />
<parameter name=""
value="true" />
<parameter name="dotNetSoapEncFix" value="true" />
<parameter name="disablePrettyXML" value="true" />
<parameter name="sendXsiTypes" value="true" />
<parameter name="sendMultiRefs" value="true" />
<parameter name="sendXMLDeclaration" value="true" />
<requestFlow name="RequestFlow1">
<handler name="Handler1"
type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session" />
</handler>
<handler name="Handler2"
type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request" />
<parameter name="extension" value=".jwr" />
</handler>
</requestFlow>
</globalConfiguration>
<responseFlow name="ResponseFlow1">
<handler name="Handler1" type="LocalResponder" />
</responseFlow>
<handler name="Handler1" type="LocalResponder" />
<handler name="LocalResponder"
type="java:org.apache.axis.transport.local.LocalResponder" />
<handler name="URLMapper"
type="java:org.apache.axis.handlers.http.URLMapper" />
<handler name="Authenticate"
type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
<handler name="Handler2"
type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
<requestFlow name="RequestFlow1">
<handler name="Handler1" type="URLMapper" />
<handler name="Handler2"
type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
</requestFlow>
<service name="AdminService" provider="java:MSG">
<parameter name="allowedMethods" value="AdminService" />
<parameter name="enableRemoteAdmin" value="false" />
<parameter name="className" value="org.apache.axis.utils.Admin" />
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
</service>
<service name="Version" provider="java:RPC">
<parameter name="allowedMethods" value="getVersion" />
<parameter name="className" value="org.apache.axis.Version" />
</service>
<!-- 开放一个服务 -->
<service name="gsNotify" provider="java:RPC">
<parameter name="allowedMethods" value="*" />
<parameter name="className"
value="web.GsNotifyImp" />
<parameter name="scope" value="Request" />
<namespace>nss</namespace>
</service>
<transport name="http">
<requestFlow name="RequestFlow1">
<handler name="Handler1" type="URLMapper" />
<handler name="Handler2"
type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
</requestFlow>
<parameter name="qs:list"
value="org.apache.axis.transport.http.QSListHandler" />
<parameter name="qs:wsdl"
value="org.apache.axis.transport.http.QSWSDLHandler" />
<parameter name="qs:method"
value="org.apache.axis.transport.http.QSMethodHandler" />
</transport>
<transport name="local">
<responseFlow name="ResponseFlow1">
<handler name="Handler1" type="LocalResponder" />
</responseFlow>
</transport>
</deployment>
⑦ iis怎样部署webservice
IIS(Internet Information Server,互联网信息服务)是一种Web(网页)服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。本次上机大家实践IIS 5.0的配置和管理。
上机学习目标:
1、了解并掌握 Windows 2000/NT 服务器上 IIS 的安装与测试
2、了解并掌握web服务器的配置及应用,其中重点掌握主目录、虚拟目录的设置与应用
3、了解并掌握FTP服务器的配置和使用
4、了解并掌握SMTP服务器的配置和使用
上机内容及操作步骤:
1、 在自己的电脑上安装IIS并测试。
进入“控制面板”,依次选“添加/删除程序→添加/删除Windows组件”,将“Internet信息服务(IIS)”前的小钩去掉(如有),重新勾选中后按提示操作即可完成IIS组件的添加。(在安装过程中要插入WIN2000或WINXP安装盘。)
测试:安装完毕后,在浏览器地址栏中输入:http://localhost(或http://服务器名,或http://127.0.0.1,或http://本机IP),如果连接成功就会出现localstart.asp的页面。
2、 IIS的配置
当IIS添加成功之后,再进入“开始→程序→管理工具→Internet服务管理器”以打开IIS管理器,对于有“已停止”字样的服务,均在其上单击右键,选“启动”来开启。
(1)IIS之WEB服务器的配置
方法如下:
在“Internet信息服务”管理窗口中右击“默认WEB站点”,在弹出的菜单中选择“属性”选项,进入属性设置对话框。
① 设置“WEB站点”,这里可以设置站点服务器的IP地址和访问端口。在“IP地址”栏中选择目前能够使用的IP地址;“TCP”端口默认为80,当然为了保密,也可以设置特殊的端口。
② 设置“主目录”, “本地路径”默认为:c:\Inetpub\wwwroot,当然可以输入(或用“浏览”按钮选择)你自己网页所在的目录作为主目录。
③ 设置“文档”选项,“启用默认文档”选中后,当在浏览器中输入域名或IP时,系统自动在“主目录”中按上到下的顺序寻找列表中指定的文件名。
其他的设置均可按默认设置。
创建虚拟目录:
若要从主目录以外的目录发布信息,则就要创建虚拟目录了,虚拟目录是指物理上为包含在主目录中的目录,但浏览器却认为该目录包含在主目录中。
创建的方法:比如你的主目录在“c:\Inetpub\wwwroot”下,而网页文件在“E:\All”中,就可以创建一个别名为test的虚拟目录,就可以这样来创建:在“默认Web站点”上单击右键,选“新建→虚拟目录”,依次在“别名”处输入“test”,在“目录”处输入“E:\All”后再按提示操作即可添加成功。
创建完了你就可以输入“localhost/test”就可以访问了。
进行下列操作:
启动一个文本编辑器,编写下列代码:
访问本页的时间是<%=time()%>!
将其保存到C:\Inetpub\wwwroot目录下,文件可命名为1.asp。
在浏览器地址栏中输入:http://localhost/1.asp,然后按回车,观察运行情况。
将1.asp文件复制刚才创建的虚拟目录中(假如别名为:test)。在浏览器的地址栏中输入: http://localhost/test/1.asp,按回车,注意观察运行情况。
(2)IIS之ftp服务器的配置
第一个FTP站点(即“默认FTP站点”)的设置方法请参照前文Web服务器中相关操作执行。需要注意的是,如果要用一个IP地址对应多个不同的FTP服务器,则只能用使用不同的端口号的方法来实现。
对于已建立好的FTP服务器,在浏览器中访问将使用,ftp://IP地址,如“ftp://10.106.1.121”。
(3)<> IIS之SMTP服务器的配置
建立IIS下的SMTP服务器的方法非常简单,只需在IIS管理器中让“默认SMTP虚拟服务器”处于已启动状态就行了;此外一般不用再做其他任何设置。
如果你想要用自己的SMTP服务器发信,只需将你E-mail客户端软件设置中“发送邮件服务器(SMTP)”项中填入“localhost”,则不管IP地址如何变化,它都能正常工作。提示:对于IIS的设置,可以在浏览器的地址栏中输入: http://localhost/iishelp,查看IIS帮助文档。
⑧ 如何在工程中使用axis2部署webservice
一、新建Web Project,名为“WebServiceDemo”
二、下载axis2-1.5-war.zip包,解压缩
将axis2/WEB-INF/lib 里的jar包拷贝到 WebServiceDemo/WebRoot/WEB-INF/lib/
将axis2.war/axis2-web拷贝至WebServiceDemo/ WebRoot/axis2-web/
axis2需要的JAR包:
三、配置axis2 servlet
打开WebServiceDemo/WebRoot/WEB-INF/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-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
四、写一个简单的web服务类
package service;
public class MyService {
public String sayHello(String name) {
return name + "says /"Hello!/"";
}
}
五、配置Web Service.
由于axis2已嵌入到WebServiceDemo项目中,所以web service就不用打包成aar,而是直接在/WEB-INF目录下创建相应的文件夹和services.xml,目录结构如下图:
六、services.xml
<?xml version="1.0" encoding="UTF-8"?>
<service name="fmService" targetNamespace="webservice.sinohuarui.com">
<schema schemaNamespace="webservice.sinohuarui.com/xsd/" />
<description>
my web service
</description>
<parameter name="ServiceClass">service.MyService</parameter>
<operation name="sayHello">
<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
</service>
如果一个类具有多个webservice方法的时候,使用serviceGroup进行配置:
<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>
<service name="myService">
<description>Web Service例子</description>
<parameter name="ServiceClass">service.MyService</parameter>
<messageReceivers>
<messageReceiver mep="w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
<messageReceiver mep="w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</messageReceivers>
</service>
</serviceGroup>
七、在浏览器中访问localhost:8080/WebServiceDemo/services/listServices
可以看到myService服务,说明服务已部署成功
输入localhost:8080/WebServiceDemo/services/myService?wsdl
可以查看到该Web服务的描述文件
其实,axis2-web下面的东西可以不要那么多,我就只保留了index.jsp,httpbase.jsp和listServices.jsp这三个文件
⑨ 如何将 webservice 部署 osb
1、jar包冲突
对照着wsdl,很快就手写好了客户端和服务端的代码,包括接口和领域模型。然后配一配cxf和spring的集成,搭了一个桩,一下就弄好了
可是将这部分代码放到项目里验证,用cxf2.5.2.jar替换了cxf2.0.13,就抛异常了:java.lang.IncompatibleClassChangeError: Implementing class
2、jar包升级后,旧功能不好用
好不容易定位出来,原来是2个版本的cxf所依赖的jar包是不同的,将相关的jar包也替换之后,发布成功了。可是系统中原来的几个老功能坏了,看来cxf的版本不能随便替换
3、jar包回退后,新功能不好用
于是又把cxf2.0.13替换了回去,这次老功能是可以了,我们新开发的web service也发布起来了,可是调用的时候报异常:
java.lang.IllegalArgumentException: object is not an instance of declaring class
后来发现,是cxf2.0.13和cxf2.5.2的配置文件的写法不同,改了一下以后,调用成功了
这3个问题的解决方法,见http://kyfxbl.iteye.com/blog/1467354
4、spring注入异常
当我们往服务端web service里注入业务逻辑组件,或者往业务逻辑组件里注入web service客户端接口时,依赖注入经常发生一些奇怪的问题,经常声明的bean找不到什么的
最后通过各种方式解决了,详情见http://kyfxbl.iteye.com/blog/1470923
不过还是遗留了一些问题没想通,以后再慢慢研究
5、根据wsdl手写的代码不好使
由于客户提供的wsdl比较复杂,手写的代码联调不通,最终还是只能用wsdl2java工具来做反向生成
6、用wsdl2java生成的代码,发布失败
生成了代码以后,发布又失败了,报了以下异常
Schema name conflict in collection. Namespace:xxxxxx
又花了1天时间解决了这个问题,详情见http://kyfxbl.iteye.com/blog/1483953
7、https证书问题
经过上面几个步骤,web service是发布起来了,通过http可以调通,但是客户要求用https协议来走,而且要求是双向认证。大家对https都不熟悉,这块花了3天时间才做出来,可以说是最困难的一步
8、实际联调时,客户端校验不通过
搞定了https协议问题之后,终于能业务联调了,可是失败了,客户系统那边报
Error code 'BEA-382505'. OSB Validate action failed validation: Expected element 'requestHeader' instead of 'requestBody' here in element XXX
定位发现原来是我们发送请求的时候,只填写了RequestBody的内容,以为不重要就没有填写RequestHead的内容,所以客户那边校验没通过
把这块改完以后,就OK了
总结一下:
1、开发新功能时,尽量在现有的jar包基础上开发。因为如果用与实际环境不同的jar包,很难保证不会出现jar包冲突,或者影响现有功能的问题
2、根据wsdl手写代码不是那么容易的,对于比较复杂的wsdl,还是用wsdl2java工具会比较保险
3、用spring配置文件来配置cxf还是很容易的,但是当集成spring和cxf的时候,依赖注入要特别小心,会有一些很异常的情况。这块的原因我现在还没有搞清楚
⑩ tomcat部署webservice项目
tomcat是一个web容器,java web项目相当与容器中的一个元素 ,当把java web项目部署到服务器的时候 就相当于在容器里面加入了一个元素
tomcat启动的时候 tomcat容器会获得里面元素的相关信息 比如web项目的名称
当用户请求服务器的时候 首先根据请求的一级域名找到你启动的tomcat容器,容器在分析一级域名后面的请求字符窜截取请求的项目名字 ,根据项目名字 把请求信息发给 容器里面与项目名字对应的web项目 然后web项目处理请求 处理完了 将响应信息 发给容器 容器在返回给用户
首先你请求的地址是本机的ip地址 ,这样请求能够发送到本机上 , 那么怎么给本机的tomcat 呢 这关键点就是 端口了 请求会根据本机上所有开启的程序的端口信息 给相应的程序
tomcat的默认端口是8080 所以你的请求地址需要加上:8080 当然你可以更改tomcat的端口比如80 这样你就不用去在请求地址上加:8080 因为100以内的端口 会自动匹配