用wsdd也部署不上,请高人指教!代码
服务端代码
/******************************************************************************
* File name: *.java
* Create date: 2004-9-16
* Copyright: Copyright (c) 2003 been protected by eazom
* @Author: softteam
* @Version: 1.0
* To change the template for this generated file go to
* Window - Preferences - Java - Code Generation - Code and Comments
*
* Modify History
* Author Date Description
*/
/**
* @author Administrator
*
* To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
public class WebObject1 {
/**
*
*/
public WebObject1() {
super();
// TODO Auto-generated constructor stub
}
public ReqMsg GetNameObject(ReqMsg r)
{
String newname="Bob"+r.get_Name();
int newage =100+r.get_Age();
r.set_Name(newname);
r.set_Age(newage);
return r;
}
public static void main(String[] args) {
}
}
class ReqMsg
{
public ReqMsg(){}
String m_strName="";
int m_nAge;
public String get_Name(){return m_strName;}
public void set_Name(String strIn){m_strName=strIn;}
public int get_Age(){return m_nAge;}
public void set_Age(int nIn){m_nAge=nIn;}
}
//server-config.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">
<service name="WebObject1" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<parameter name="className" value="WebObject1"/>
<typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://localhost"
qname="ns3: ReqMsg"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
type="java:DefaultNamespace.ReqMsg"
xmlns:ns2="http://localhost"/>
</service>
</deployment>
http://localhost/myapp/WebObject1.jws?wsdl
可以看到发布成功
客户端代码
import localhost.myapp.WebObject1_jws.*;
。。。。。。
try
{
WebObject1Service ws1 = new WebObject1ServiceLocator();
localhost.myapp.WebObject1_jws.WebObject1 w1 = ws1.getWebObject1();
DefaultNamespace.ReqMsg r1 =new DefaultNamespace.ReqMsg();
r1.set_Age(10);
r1.set_Name("coco");
DefaultNamespace.ReqMsg r2 = w1.getNameObject(r1);
System.out.println(r2.get_Name());
System.out.println(Integer.toString(r2.get_Age()));
}catch(Exception e)
{
e.printStackTrace();
}
结果
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXException: Deserializing parameter 'r': could not find deserializer for type {http://DefaultNamespace}ReqMsg
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace: AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXException: Deserializing parameter &apos;r&apos;: could not find deserializer for type {http://DefaultNamespace}ReqMsg
faultActor:
faultNode:
faultDetail:
org.xml.sax.SAXException: Deserializing parameter 'r': could not find deserializer for type {http://DefaultNamespace}ReqMsg
请高手帮忙,谢谢!
7 个解决方案
#1
up
#2
class ReqMsg implements Serializable{// you must add it.
public ReqMsg(){}
String m_strName="";
int m_nAge;
public String get_Name(){return m_strName;}
public void set_Name(String strIn){m_strName=strIn;}
public int get_Age(){return m_nAge;}
public void set_Age(int nIn){m_nAge=nIn;}
}
// I'd rather invoke the address from :
http://localhost/myapp/WebObject1
public ReqMsg(){}
String m_strName="";
int m_nAge;
public String get_Name(){return m_strName;}
public void set_Name(String strIn){m_strName=strIn;}
public int get_Age(){return m_nAge;}
public void set_Age(int nIn){m_nAge=nIn;}
}
// I'd rather invoke the address from :
http://localhost/myapp/WebObject1
#3
远程方法调用的参数以及返回值对象都必须是可序列化的
http://www.javayou.com
http://www.javayou.com
#4
不懂,帮顶混分
好难啊
好难啊
#5
错误在于qname="ns3: ReqMsg" 中,没有指出ns3的名字空间,使得axis序列化不知道如何匹配序列化类与名字空间的关系
#6
楼上所说正解...我原来也原到这个问题........就是不解解析自己定义类型.最后用jb来弄其所生成的wsdl就能让客户端能正确解析自定义类型...
#7
自定义的类型,还是借助IDE来开发比较好呢,
因为IDE要根据自定义类型,自动生成一些java的类。
自己写的话,如果不是对webservice开发很熟练,
是不知道要写些什么呢,还有命名的规则等等。
因为IDE要根据自定义类型,自动生成一些java的类。
自己写的话,如果不是对webservice开发很熟练,
是不知道要写些什么呢,还有命名的规则等等。
#1
up
#2
class ReqMsg implements Serializable{// you must add it.
public ReqMsg(){}
String m_strName="";
int m_nAge;
public String get_Name(){return m_strName;}
public void set_Name(String strIn){m_strName=strIn;}
public int get_Age(){return m_nAge;}
public void set_Age(int nIn){m_nAge=nIn;}
}
// I'd rather invoke the address from :
http://localhost/myapp/WebObject1
public ReqMsg(){}
String m_strName="";
int m_nAge;
public String get_Name(){return m_strName;}
public void set_Name(String strIn){m_strName=strIn;}
public int get_Age(){return m_nAge;}
public void set_Age(int nIn){m_nAge=nIn;}
}
// I'd rather invoke the address from :
http://localhost/myapp/WebObject1
#3
远程方法调用的参数以及返回值对象都必须是可序列化的
http://www.javayou.com
http://www.javayou.com
#4
不懂,帮顶混分
好难啊
好难啊
#5
错误在于qname="ns3: ReqMsg" 中,没有指出ns3的名字空间,使得axis序列化不知道如何匹配序列化类与名字空间的关系
#6
楼上所说正解...我原来也原到这个问题........就是不解解析自己定义类型.最后用jb来弄其所生成的wsdl就能让客户端能正确解析自定义类型...
#7
自定义的类型,还是借助IDE来开发比较好呢,
因为IDE要根据自定义类型,自动生成一些java的类。
自己写的话,如果不是对webservice开发很熟练,
是不知道要写些什么呢,还有命名的规则等等。
因为IDE要根据自定义类型,自动生成一些java的类。
自己写的话,如果不是对webservice开发很熟练,
是不知道要写些什么呢,还有命名的规则等等。