web service 第一天接触不懂 还是那个访问天气预报的例子 代码很简单

cfd406635982 2009-10-16 10:44:28

public class WetherReport {

public static void main(String[] args) {
Service service = new Service();
try {
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL("http://www.ayandy.com/Service.asmx?WSDL"));
call.setUseSOAPAction(true);
call.setSOAPActionURI("http://tempuri.org/getSupportProvince");

String [] weatherReport2 = (String[])call.invoke("getSupportProvince", new String[]{"all"});
System.out.println(weatherReport2);
} catch (ServiceException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (AxisFault e) {
e.printStackTrace();
}
}

}

报错如下:
org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
at org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeserializer.java:145)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:345)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
at org.apache.axis.client.Call.invoke(Call.java:2467)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:2391)
at com.cfd.testMath.WetherReport.main(WetherReport.java:24)
希望大家指点一下! 谢谢 。我是新手
...全文
3601 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
[GeorgeYoung] 2012-10-19
  • 打赏
  • 举报
回复
使用 web 服务器 不行吗?????????????? 不使用main 方法 怎么做呢
LIMINLY520 2011-08-01
  • 打赏
  • 举报
回复
路过。。。。
学习一下……
无味杂陈 2009-10-26
  • 打赏
  • 举报
回复
可以在xfire的支持下调用。写个纯java类
littlemonster 2009-10-26
  • 打赏
  • 举报
回复
顶龙果兄~

Quote=引用 3 楼 bao110908 的回复:]
我都是用 CXF 的,我和你说一下 CXF 怎么调用吧。

1:到http://cxf.apache.org/download.html 去下载最新的 Apache CXF 包,下载好后解压到某个目录中,比如:d:/apache/cxf-2.1.4 中;

2:在控制台中进入 d:/apache/cxf-2.1.4/bin 目录,执行这个命令:

wsdl2java -p com.bao.ws -d d:/ws -verbose http://www.ayandy.com/Service.asmx?WSDL

wsdl2java 命令会生成一些封装的类和 SOAP 接口。

-p 参数是个包名,表示生成的类、接口放在什么包下面
-d 是个目录名,生成的包放在什么目录下
-verbose 是在生成代码时产生一些日志输出
最后一个是 WSDL 地址

3:生成好后把这些文件复制到 Eclipse 某个工程的相同包下面去。

4:到 CXF 的 lib 目录中把这些文件加载到 Eclipse 的 classpath 中去:

cxf-2.2.3.jar
geronimo-activation_1.1_spec-1.0.2.jar
geronimo-annotation_1.0_spec-1.1.1.jar
geronimo-jaxws_2.1_spec-1.0.jar
geronimo-stax-api_1.0_spec-1.0.1.jar
geronimo-ws-metadata_2.0_spec-1.1.2.jar
jaxb-api-2.1.jar
jaxb-impl-2.1.12.jar
saaj-api-1.3.jar
wsdl4j-1.6.2.jar
wstx-asl-3.2.8.jar
XmlSchema-1.4.5.jar

4:写个 Test 类测试一下:

Java codeimport javax.xml.namespace.QName;import javax.xml.ws.Service;import javax.xml.ws.soap.SOAPBinding;publicclass WebServiceTest {privatestaticfinal QName SERVICE_NAME=new QName("http://tempuri.org/","ServiceSoap");privatestaticfinal QName PORT_NAME=new QName("http://tempuri.org/","ServiceSoapPort");publicstaticvoid main(String[] args) {
Service service= Service.create(SERVICE_NAME);
String endpointAddress="http://www.ayandy.com/Service.asmx";
service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
ServiceSoap hw= service.getPort(ServiceSoap.class);
ArrayOfString as= hw.getWeatherbyCityName("上海", TheDayFlagEnum.TODAY);for(String str : as.getString()) {
System.out.println(str);
}
}
}

需要注意一下的是,我用的 CXF 2.1.3 生成的 Service 类有个 bug,只要把这个类 import 中的这行:import javax.xml.ws.Service; 去掉就行了。
[/Quote]
cfd406635982 2009-10-20
  • 打赏
  • 举报
回复

//Persion为回复帖子人


//count 为自己的回帖数目
int count = 0;
//其他人的回帖数目
int otherCount = 0;
//allReplys 里是全部回贴的人
List<Person> allReplys = new ArrayList<Person>();

for(int i=0;i<allReplys.size();i++) {
if(allReplys.get(i).getName().equals("我自己")) {
count ++;
}
}

if(allReplys.size()-count< 1) {
System.out.println("没人回我就自己顶!");
}else {
for(int i=0;i<allReplys.size();i++) {
if(!allReplys.get(i).getName().equals("我自己") ) {
System.out.println("谢谢啦!");
otherCount ++;
}
}
}

if(otherCount < 5) {
System.out.println("兄弟伙些!顶起啊! 都没大有人回!");
}
cfd406635982 2009-10-20
  • 打赏
  • 举报
回复
恩 自己写的 呵呵
xiaozhangnima 2009-10-20
  • 打赏
  • 举报
回复
学习
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cfd406635982 的回复:]
Java code//Persion为回复帖子人//count 为自己的回帖数目int count=0;//其他人的回帖数目int otherCount=0;//allReplys 里是全部回贴的人List<Person> allReplys=new ArrayList<Person>();for(int i=0;i<allReplys.size();i++) {if(allReplys.get(i).getName().equals("我自己")) {
count++;
}
}if(allReplys.size()-count<1) {
System.out.println("没人回我就自己顶!");
}else {for(int i=0;i<allReplys.size();i++) {if(!allReplys.get(i).getName().equals("我自己") ) {
System.out.println("谢谢啦!");
otherCount++;
}
}
}if(otherCount<5) {
System.out.println("兄弟伙些!顶起啊! 都没大有人回!");
}
[/Quote]

哈哈,楼主太可爱了,这段代码自己写的?
  • 打赏
  • 举报
回复
我都是用 CXF 的,我和你说一下 CXF 怎么调用吧。

1:到 http://cxf.apache.org/download.html 去下载最新的 Apache CXF 包,下载好后解压到某个目录中,比如:d:/apache/cxf-2.1.4 中;

2:在控制台中进入 d:/apache/cxf-2.1.4/bin 目录,执行这个命令:

wsdl2java -p com.bao.ws -d d:/ws -verbose http://www.ayandy.com/Service.asmx?WSDL

wsdl2java 命令会生成一些封装的类和 SOAP 接口。

-p 参数是个包名,表示生成的类、接口放在什么包下面
-d 是个目录名,生成的包放在什么目录下
-verbose 是在生成代码时产生一些日志输出
最后一个是 WSDL 地址

3:生成好后把这些文件复制到 Eclipse 某个工程的相同包下面去。

4:到 CXF 的 lib 目录中把这些文件加载到 Eclipse 的 classpath 中去:

cxf-2.2.3.jar
geronimo-activation_1.1_spec-1.0.2.jar
geronimo-annotation_1.0_spec-1.1.1.jar
geronimo-jaxws_2.1_spec-1.0.jar
geronimo-stax-api_1.0_spec-1.0.1.jar
geronimo-ws-metadata_2.0_spec-1.1.2.jar
jaxb-api-2.1.jar
jaxb-impl-2.1.12.jar
saaj-api-1.3.jar
wsdl4j-1.6.2.jar
wstx-asl-3.2.8.jar
XmlSchema-1.4.5.jar

4:写个 Test 类测试一下:

import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.soap.SOAPBinding;

public class WebServiceTest {

private static final QName SERVICE_NAME = new QName("http://tempuri.org/", "ServiceSoap");
private static final QName PORT_NAME = new QName("http://tempuri.org/", "ServiceSoapPort");

public static void main(String[] args) {
Service service = Service.create(SERVICE_NAME);
String endpointAddress = "http://www.ayandy.com/Service.asmx";
service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
ServiceSoap hw = service.getPort(ServiceSoap.class);
ArrayOfString as = hw.getWeatherbyCityName("上海", TheDayFlagEnum.TODAY);
for(String str : as.getString()) {
System.out.println(str);
}
}
}


需要注意一下的是,我用的 CXF 2.1.3 生成的 Service 类有个 bug,只要把这个类 import 中的这行:import javax.xml.ws.Service; 去掉就行了。
凡员外 2009-10-17
  • 打赏
  • 举报
回复
WetherReport {
前端可视化软件guiplan教程,无论是前端还是不前端,都可以学会基本的布局操作。全程都是可视化教学,自动生成代码。生成之后的代码符合w3c规范,除了学会软件的使用以外,我们还能学到前端html结构搭建,拖拽调整html结构,css常用样式可视化的配置,以及交互功能vue可视化配置,简单代码编写以及可视化数据绑定,事件绑定等。全程可视化编程,配置好之后效果立刻生效,同步更新,直接点击页面即可查看交互效果,更有利于减少研究成本与学习成本。无论是制作静态html页面,还是动态的vue项目页面。都支持可视化布局,可视化拖拽,还支持可视化交互。目前支持unipp与element-ui框架,支持可视化html元素操作,支持可视化拖拽html元素结构,支持一键添加html标签,支持一键添加uniapp组件或element-ui组件,支持可视化调整css样式,支持可视化vue数据与方法创建,支持可视化数据指令事件等一键绑定,支持实时预览实时更新,支持可视化交互测试修改之后直接点击预览页面即可测试,支持一键生成代码html,css,js图片等支持一键保存文件无论是静态html页面还是动态vue文件都能自动分类,自动存储。支持手写代码与自动生成代码混合编写开发,比如添加过滤器filters,监听器watch等。灵活便捷对程序员有好,是一款真正适合程序员开发的软件。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧