作者归档:Rick

cxf生成客户端代码成功,使用抛出异常

今天用cxf生成客户端代码,通过wsdl获取天气预报

wsdl:http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl

参照博客http://a.qt.hk/v/Csdnblog/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9zb25yaWNrL2FydGljbGUvZGV0YWlscy80NTU3NDY2Mw==

一直报错,折腾了好久

Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: No namespace on "html" element. You must send a SOAP request.
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:156)
at com.sun.proxy.$Proxy32.getWeather(Unknown Source)
at com.devins.ws.weather.WeatherQueryTest.main(WeatherQueryTest.java:18)
Caused by: org.apache.cxf.binding.soap.SoapFault: No namespace on "html" element. You must send a SOAP request.
at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.readVersion(ReadHeadersInterceptor.java:109)
at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:142)
at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:60)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:801)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1679)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1517)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1425)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:650)

注意,此客户端工程调用无需引入cxf的相关jar包,引入执行上面的测试代码会报如上错误:

Eclipse无法自动编译出class文件

    有时候用Eclipse或者MyEclipse的时候,发现不能自动编译,web工程下面缺少class文件!
    第一个可能是你的自动编译没打开:project->build automatically;第二个要注意你的工程项目上有没有打小红叉,项目报错时,eclipse是不自动编译的。你可以检查一下是否有些类出错,或是检查一下“构建路径”是否完整,特别是从换机子调试程序时,有些导入jar包的路径不对。
    通常我们遇到的是第二个,就是有的包在别人机器上是有的,但是到你的机器上相同路径是没有的,删去和那个包有关系的,或者添加新的包路径
    eclipse出现不编译工程的现象。怎么刷新classes目录下也是空的。
    具体都操作了:打开project->build automatically   试后不行,还是不编译。
    打开project ——> build automatically 另外 clean一下就可能会编译了,结果还不行。(一般先运行project ——>clean…,然后再执行build automatically)
    eclipse默认是选自动编译。即使取消自动编译,手动build工程,也不能编译。

    出现这种情况一般有以下几种原因:

    无法编译class文件,说明项目有错,删除在view’problem’,重新编译就可以了

   

  项目错误,可能有以下可能性

    1.如果项目里引了某个不用的jar包,而那个包又被你删了,就会出现不报错但怎么也编译不出来class文件的情况,可以把所有包都删除,然后一个一个的再引入(需要的),不要一下子把所有包都引入来,没用的可能会引起不良后果。

    2.想删掉某个class文件重新生成,删除class文件后,但classes目录下的文件夹被其它程序打开,比如Total Commander.此时编译也不会通过,在View下problems下可能会提示“con’t delete classes ……”。关掉其它程序重新编译即可。
    3.还有种情况是remove掉 JRE System Library,重新导入即可编译。但是什么原因导致的还不清楚。
    4.项目引用了其他的项目,而被你引用的项目引用了某个不用的jar包之类
    如果你使用了maven你可以在命令提示行下,跳转到项目路径,执行mvn eclipse:clean eclipse:eclipse重新编译项目

Python发布自定义模块(五)

php开发中,我们定义好了一个公用函数,则会将代码放在公用的文件中,需要用到的时候,使用require或者include函数包含这个公用的文件,即可在程序中实现可重用。接下来看看python中如何操作

1. 在e:/python目录下新建一个文件夹nester做实验,建立2个py文件分别是nester.pysetup.py

          nester.py

#计算圆的面积,参数为半径
p = 3.14
def area(r=1):
    # p = 3.14
    return p * r

          setup.py

from distutils.core import setup
 
setup (
    name = 'nester',
    version = '1.0.1',
    py_modules = ['nester'],
    author = 'Rick.xu',
    author_email = 'jkxyx205@163.com',
    description = 'calculate area of circle',
)

注意:
name和py_modules这两个参数一定要与nester.py文件名相同,否则发布安装时会发出模块文件找不到的错误

2. 发布模块

发布模块,但还不能在程序中被调用,还需要安装,接着看

3.安装模块

4.使用模块

import nester
nester.area(2)

这里需要注意一个问题,很多新手会这样调用:area(2)
系统会发出这样的一个错误信息:NameError: name ‘area’ is not defined
原因是当模块创建以后,系统自动创建一个与模块名称相同的命名空间(nester),并将函数放在命名空间中,简单的通过area调用,自然无法找到函数,正确的方法:
nester.area(2)
直接把命名空间带上即可。

Python代码片段(四)

Python代码片段

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#这是一段注释
a = 1000
if a > 100:
    print('中文:a > 100')
else: 
	print('a <= 100');

names = ['Rick','Ashley','Mike']

#for循环操作
for name in names :
	print(name)

#自定义函数
def my_fun(age):
    if age <= 20:
    	print("young man")
    else:
    	print("old man")	
    return 2,'Mike'   	

#先定义后使用
res = my_fun(17)  

#返回一个元组tuple
print(res[1])

Python基础(三)

基础学习

下面是一个Python的代码程序片段

#这是一段注释
a = 1000
if a > 100:
print('a > 100')
else: 
print('a <= 100');

#后面跟注释语句,其他没行都是一个“有效”的语句,当语句以:结尾时,缩进语句视为代码块,缩进的另一个好处是强迫你写出缩进较少的代码,你会倾向于把一段很长的代码拆分成若干函数,从而得到缩进较少的代码。

Python是大小写敏感的。

1.数据类型和变量

  1. Python可以处理任意类型的数字,程序的表现方法跟数学是一致的:1,0,-100;浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23×109和12.3×108是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23×109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等
  2. 浮点小数:浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23×109和12.3×108是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23×109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等    
  3. 字符串

         用’或””表示括起来任何文本,比如’abc’,”efg”。如何文本中包含’或者”,可以通过\进行转义,列如:

'I\'m \"OK\"!'

表示的是

I'm "OK"!

2. 布尔值

Python中用True和False表示,注意大小写

3.空值

Python中用None表示空值,None不能理解0,因为0是有意义的

4.变量

a = 100

b = a

a = ‘100’

c = 10