java调用webservice出错了!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java调用webservice出错了!相关的知识,希望对你有一定的参考价值。
用线程做了个读取XML自动入库数据库的程序!程序里是两个线程,由一个主线程控制
,这次想要加个线程,来监控程序!用java调用.NET的webservice。用单独的一个类试了试
这个webservice方法(有main方法的类)是可以得到返回的值的!
但是,当我放到程序一个线程中去控制的时候就出错了(这个线程是没隔3分钟循环的)
出错情况如下:
xisFault
faultCode: http://xml.apache.org/axis/HTTP
faultSubcode:
faultString: (404)Not Found
faultActor:
faultNode:
faultDetail:
:return code: 404
<html>
<head>
<title>The resource cannot be found.</title>
<style>
body font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;
p font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px
b font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px
H1 font-family:"Verdana";font-weight:normal;font-size:18pt;color:red
H2 font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon
pre font-family:"Lucida Console";font-size: .9em
.marker font-weight: bold; color: black;text-decoration: none;
.version color: gray;
.error margin-bottom: 10px;
.expandable text-decoration:underline; font-weight:bold; color:navy; cursor:hand;
</style>
</head>
<body bgcolor="white">
<span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>
<h2> <i>The resource cannot be found.</i> </h2></span>
<font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">
<b> Description: </b>HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.
<br><br>
<b> Requested URL: </b>/Monitor.asmx<br><br>
</body>
</html>
http://xml.apache.org/axis/HttpErrorCode:404
(404)Not Found
等待解决!
但是我用单独的类去调用webservice是可以调用的!返回值也很正常!但是在线程里调用就不行!这个线程是被另一个主线程控制start()的。这个主线程同时还控制了分析数据,并且入库的那个线程。
我想应该是线程方面的问题了!是不是线程安全方面的?
文章分类:Java编程
今天下午突然想研究下WEBSERVICE,从网上找了好多实例,但很多写的让人实在难以恭维,花了三个小时的圈圈转后总算搞通了,其实也挺简单的,这里特别感谢http://www.liuzm.com/article/java/992.htm这篇文章,总算让我弄明白了,现在贴出我的实例步骤,感谢那个博主的同时,与大家共同分享。
一:
首先创建个WEB工程,然后: http://ws.Apache.org/axis/网站下载Axis安装包.当然还依赖其他包的,我这里在附件里上传了所有应用到得包,方便大家。
二:
然后就写wsdd 文件(注:其实这里真的不用,可以跳过第二步)为了生成这个文件:server-config.wsdd
deploy.wsdd:
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="" target="_blank">http://xml.apache.org/axis/wsdd/providers/java">
<service name="HelloWorld" provider="java:RPC">
<parameter name="className" value="HelloWorld"/>
<parameter name="allowedMethods" value="sayHello"/>
</service>
</deployment>
在DOS下转换目录到%TOMCAT_HOME%\webapps\axis\WEB-INF,命令:
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd
三:
可以自己写第二步中的文件,代码如下:
<?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="sendMultiRefs" value="true"/>
<parameter name="disablePrettyXML" value="true"/>
<parameter name="dotNetSoapEncFix" value="true"/>
<parameter name="enableNamespacePrefixOptimization" value="false"/>
<parameter name="sendXMLDeclaration" value="true"/>
<parameter name="sendXsiTypes" value="true"/>
<parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
</globalConfiguration>
<handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper"/>
<service name="Login.jws" provider="java:RPC">
<parameter name="className" value="server.SayHello"/>
<parameter name="scope" value="request"/>
<parameter name="allowedMethods" value="*"/>
<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
</requestFlow>
</transport>
</deployment>
放到 WEB-INF 目录下 和web.xml一起,其中,WEB.XML可以直接从你下载的axis项目中拿来到自己工程就好,或者自己添加:
<servlet>
<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>/services/*</url-pattern>
</servlet-mapping>
四:
服务端提供的方法:
package server;
public class SayHello
public String getName(String name)
return "hello====>" + name;
五:
客户端访问服务端接口获得数据的方法:
package client;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class TestClient
public static void main(String[] args) throws Exception
// 指出service所在URL
String endpoint = "http://127.0.0.1:8082/webservice/services/Login.jws";
// 创建一个服务(service)调用(call)
Service service = new Service();
Call call = (Call) service.createCall();// 通过service创建call对象
// 设置service所在URL
call.setTargetEndpointAddress(new java.net.URL(endpoint));
// 方法名(processService)与MyService.java方法名保持一致
call.setOperationName("getName");
// Object 数组封装了参数,参数为"This is Test!",调用processService(String arg)
String ret = (String) call.invoke(new Object[] "继中" );
System.out.println(ret);
六:启动tomcat,先访问http://127.0.0.1:8082/webservice/services,看是否有方法显示,有显示,则代表服务端提供的接口可以成功访问了。
我的效果是这样:
And now... Some Services
•Login.jws (wsdl)
◦getName
七:
然后在本地跑客户端TestClient,就应该有结果啦,大家试试吧。
需要lib.jar可以到这里找http://yangjizhong.javaeye.com/blog/579511
参考资料:http://yangjizhong.javaeye.com/blog/579511
参考技术A <h2> <i>The resource cannot be found.</i> </h2> 参考技术B 你在仔细看看你的线程问题,再看看你的那个后台是不是有转业,你没找对,他说没有找到你要找的呢个页面呀本回答被提问者采纳 参考技术C 是不是数据库链接用完没释放 用了几天达到上限了调用 WebService 时出错 - 无法初始化代理 - 没有会话
【中文标题】调用 WebService 时出错 - 无法初始化代理 - 没有会话【英文标题】:ERROR during invoking WebService - could not initialize proxy - no Session 【发布时间】:2012-03-24 10:56:21 【问题描述】:应用程序:Spring + Hibernate + Apache CXF - 简单的打招呼服务,它采用一个参数 - 数据库中对象的 ID 并返回文本“Hello:” + person.getName();
这里有一些代码:
@Entity
public class Person
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String login;
private String email;
//getters and setters
个人道: 公共接口 PersonDAO public void savePerson(Person person); public Person getPerson(long id);
PersonDAOImpl:
@Repository
@Transactional
public class PersonDAOImpl implements PersonDAO
@Autowired
private SessionFactory sessionFactory;
public void savePerson(Person person)
sessionFactory.getCurrentSession().save(person);
public Person getPerson(long id)
Hibernate.initialize(sessionFactory);
return (Person) sessionFactory.getCurrentSession().load(Person.class, id);
PersonWebService:
@WebService
public interface PersonWebService
public String sayHello(long id);
PersonWebServiceImpl:
@WebService(endpointInterface="com.robert.example.testowy.webservices.PersonWebService")
public class PersonWebServiceImpl implements PersonWebService
@Autowired
private PersonDAO personDAO;
public String sayHello(long id)
Person person = personDAO.getPerson(id);
return "Hello: " + person.getLogin();
和来自xml的数据源conf(dataSurce,sessionFactory):
<context:annotation-config />
<context:component-scan base-package="com.robert.example.testowy" />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
p:driverClassName="com.mysql.jdbc.Driver"
p:url="jdbc:mysql://localhost:3306/edyplom"
p:username="root"
p:password="sedes" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan">
<value>com.robert.example.testowy.domain</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
</props>
</property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
我找到了一些解决方案,但对我不起作用。我感谢任何帮助建议,当然还有解决方案。
【问题讨论】:
事务从哪里开始?我在 PersonWebServiceImpl 中没有看到任何与 Transaction 相关的注释? PaersonDAO 被标记为 ttansactional。 【参考方案1】:好的,我找到了我有错误的地方......在我的例子中,WebService 方法 sayHello,应该是事务性的......在 sayHello 上添加注释 @Transactional 后工作正常。
【讨论】:
以上是关于java调用webservice出错了!的主要内容,如果未能解决你的问题,请参考以下文章