webservice对象传递问题

fafi09 2011-03-24 12:38:10
写了一个webservice,传递对象的时候,对象的属性(String类型的总返回时空),哪位帮我点拨一下吧。

《webservice服务器端》
----------------------webservice接口-------------------------------------------
public interface Caculator {
。。。
TeacherEntity getTeacher(TeacherEntity teacher);
}
-------------------------------------------------------------------------------

----------------------webservice实现-------------------------------------------
public class CaculatorImpl implements Caculator {

。。。。。
public TeacherEntity getTeacher(TeacherEntity teacher) {
TeacherEntity teacherTmp = new TeacherEntity();
teacherTmp.setAge(teacher.getAge());
teacherTmp.setTeacherName(teacher.getTeacherName());
System.out.println("teacher's name is: " + teacher.getTeacherName());
return teacherTmp;
}
}
----------------------------------------------------------------------------------------

-------------------一个entity的类POJO实现了serilizable接口------------------------------
public class TeacherEntity implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private int age;
private String teacherName;

public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getTeacherName() {
return teacherName;
}
public void setTeacherName(String teacherName) {
this.teacherName = teacherName;
}
}
------------------------------------------------------------------------------

---------------------------下面是生成的WSDL-----------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://service.webservice.com"
xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding" xmlns:tns="http://service.webservice.com"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="qualified" elementFormDefault="qualified"
targetNamespace="http://service.webservice.com">
<xsd:complexType name="TeacherEntity">
<xsd:sequence>
<xsd:element minOccurs="0" name="age" type="xsd:int" />
<xsd:element minOccurs="0" name="teacherName" nillable="true"
type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="getTeacher">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="in0"
nillable="true" type="tns:TeacherEntity" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getTeacherResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="out"
nillable="true" type="tns:TeacherEntity" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="getTeacherRequest">
<wsdl:part name="parameters" element="tns:getTeacher">
</wsdl:part>
</wsdl:message>
<wsdl:message name="getTeacherResponse">
<wsdl:part name="parameters" element="tns:getTeacherResponse">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="CalculatorServicePortType">
<wsdl:operation name="getTeacher">
<wsdl:input name="getTeacherRequest" message="tns:getTeacherRequest">
</wsdl:input>
<wsdl:output name="getTeacherResponse" message="tns:getTeacherResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="CalculatorServiceHttpBinding" type="tns:CalculatorServicePortType">
<wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="getTeacher">
<wsdlsoap:operation soapAction="" />
<wsdl:input name="getTeacherRequest">
<wsdlsoap:body use="literal" />
</wsdl:input>
<wsdl:output name="getTeacherResponse">
<wsdlsoap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="CalculatorService">
<wsdl:port name="CalculatorServiceHttpPort" binding="tns:CalculatorServiceHttpBinding">
<wsdlsoap:address
location="http://localhost:8080/webservieTest/services/CalculatorService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
-------------------------------------------------------------------------------


《客户端代码》
--------------------------------ant build.xml 生成stub-------------------------
<?xml version="1.0" encoding="UTF-8"?>
<project name="webserviceClient" basedir="." default="gen-webservice">
<property file="build.properties">
</property>
<path id="project-classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<target name="gen-webservice">
<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask"
classpathref="project-classpath" />
<wsgen outputDirectory="${src.dir}"
wsdl="${wsdl.dir}" package="com.webservice.client" overwrite="true"/>
</target>
</project>
---------------------------------------------------------------------------------

------------------------客户端测试代码-------------------------------------------
public class Client {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
CalculatorServiceClient csc = new CalculatorServiceClient();
CalculatorServicePortType csh = csc.getCalculatorServiceHttpPort();

TeacherEntity teacher = new TeacherEntity();

JAXBElement<String> teacherName = new JAXBElement<String>(new QName(
"", "teacherName"), String.class, TeacherEntity.class, "Tom");
teacher.setAge(13);
teacher.setTeacherName(teacherName);

System.out.println(teacher.getTeacherName().getValue());
System.out.println("getTeacher: " +
csh.getTeacher(teacher).getAge() + " " +
csh.getTeacher(teacher).getTeacherName().getValue());

}

}

结果:
getTeacher: 13 null

《结果监测soap-xml传输》
-----------------------------传入结果-----------------------------
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<ns1:getTeacher xmlns:ns1="http://service.webservice.com">
<ns1:in0>
<ns1:age>13</ns1:age>
<teacherName xmlns="">Tom</name>
</ns1:in0>
</ns1:getTeacher>
</soap:Body>
</soap:Envelope>
--------------------------------------------------------------------------

-------------------------------返回结果-----------------------------------
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<ns1:getTeacherResponse xmlns:ns1="http://service.webservice.com">
<ns1:out>
<age xmlns="http://service.webservice.com">13</age>
<teacherName xmlns="http://service.webservice.com" xsi:nil="true" />
</ns1:out></ns1:getTeacherResponse>
</soap:Body>
</soap:Envelope>
--------------------------------------------------------------------------

从监视结果看确实没有返回!而且服务器端的服务代码(teacherName)传入的就是null.

为什么请大家帮我看看,谢谢!
...全文
486 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuhuang007 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fafi09 的回复:]

问题好像找到了,
JAXBElement<String> teacherName = new JAXBElement<String>(new QName(
"", "teacherName"), String.class, TeacherEntity.class, "Tom");

改为
JAXBElement<String> teacherName = new JAXBElement……
[/Quote]
new QName(
"", "ns1:teacherName") 这种做法有点不妥吧!~
应该是这样的吧!~
new QName("http://service.webservice.com","teacheerName","ns1");
sfxdawn 2011-03-28
  • 打赏
  • 举报
回复
Congratulations~每天都在回帖
fafi09 2011-03-24
  • 打赏
  • 举报
回复
问题好像找到了,
JAXBElement<String> teacherName = new JAXBElement<String>(new QName(
"", "teacherName"), String.class, TeacherEntity.class, "Tom");

改为
JAXBElement<String> teacherName = new JAXBElement<String>(new QName(
"", "ns1:teacherName"), String.class, TeacherEntity.class, "Tom");

就ok了

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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