2013-08-17 272 views
0

我想通过发送肥皂请求到服务 访问java web服务奇怪的部分是,直到最近它工作正常,现在它给了我一个内部服务器错误 什么我做错了吗?从web服务客户端访问java web服务

这是我的SOAP消息:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://webservice.lenabru.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <q0:register><q0:regFirstName></q0:regFirstName><q0:regLastName></q0:regLastName><q0:regLoginName></q0:regLoginName><q0:regPassword></q0:regPassword><q0:regAddress></q0:regAddress><q0:regEmail></q0:regEmail><q0:regPhone></q0:regPhone></q0:register></soapenv:Body></soapenv:Envelope> 

,这是响应我从服务器

"<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<soapenv:Body> 
    <soapenv:Fault> 
    <faultcode>soapenv:Server.userException</faultcode> 
    <faultstring>java.lang.reflect.InvocationTargetException</faultstring> 
    <detail> 
    <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">Lena</ns1:hostname> 
    </detail> 
    </soapenv:Fault> 
</soapenv:Body> 
</soapenv:Envelope>" 

得到,这是将WebMethod的内容,我试图达到:

@WebMethod 
    public boolean register(String regFirstName, String regLastName, String regLoginName, String regPassword, String regAddress, String regPhone, String regEmail) { 
     return false; 
    } 

这是我的wsdl:

<wsdl:definitions xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://webservice.lenabru.com" xmlns:intf="http://webservice.lenabru.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://webservice.lenabru.com"> 
<!-- 
WSDL created by Apache Axis version: 1.4 
Built on Apr 22, 2006 (06:55:48 PDT) 
--> 
<wsdl:types> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://webservice.lenabru.com"> 
<element name="register"> 
<complexType> 
<sequence> 
<element name="regFirstName" type="xsd:string"/> 
<element name="regLastName" type="xsd:string"/> 
<element name="regLoginName" type="xsd:string"/> 
<element name="regPassword" type="xsd:string"/> 
<element name="regAddress" type="xsd:string"/> 
<element name="regPhone" type="xsd:string"/> 
<element name="regEmail" type="xsd:string"/> 
</sequence> 
</complexType> 
</element> 
<element name="registerResponse"> 
<complexType> 
<sequence> 
<element name="registerReturn" type="xsd:boolean"/> 
</sequence> 
</complexType> 
</element> 
<element name="isUserExists"> 
<complexType> 
<sequence> 
<element name="userName" type="xsd:string"/> 
</sequence> 
</complexType> 
</element> 
<element name="isUserExistsResponse"> 
<complexType> 
<sequence> 
<element name="isUserExistsReturn" type="xsd:boolean"/> 
</sequence> 
</complexType> 
</element> 
</schema> 
</wsdl:types> 
<wsdl:message name="isUserExistsResponse"> 
<wsdl:part element="impl:isUserExistsResponse" name="parameters"></wsdl:part> 
</wsdl:message> 
<wsdl:message name="registerRequest"> 
<wsdl:part element="impl:register" name="parameters"></wsdl:part> 
</wsdl:message> 
<wsdl:message name="isUserExistsRequest"> 
<wsdl:part element="impl:isUserExists" name="parameters"></wsdl:part> 
</wsdl:message> 
<wsdl:message name="registerResponse"> 
<wsdl:part element="impl:registerResponse" name="parameters"></wsdl:part> 
</wsdl:message> 
<wsdl:portType name="ElectronicArenaWebService"> 
<wsdl:operation name="register"> 
<wsdl:input message="impl:registerRequest" name="registerRequest"></wsdl:input> 
<wsdl:output message="impl:registerResponse" name="registerResponse"></wsdl:output> 
</wsdl:operation> 
<wsdl:operation name="isUserExists"> 
<wsdl:input message="impl:isUserExistsRequest" name="isUserExistsRequest"></wsdl:input> 
<wsdl:output message="impl:isUserExistsResponse" name="isUserExistsResponse"></wsdl:output> 
</wsdl:operation> 
</wsdl:portType> 
<wsdl:binding name="ElectronicArenaWebServiceSoapBinding" type="impl:ElectronicArenaWebService"> 
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 
<wsdl:operation name="register"> 
<wsdlsoap:operation soapAction=""/> 
<wsdl:input name="registerRequest"> 
<wsdlsoap:body use="literal"/> 
</wsdl:input> 
<wsdl:output name="registerResponse"> 
<wsdlsoap:body use="literal"/> 
</wsdl:output> 
</wsdl:operation> 
<wsdl:operation name="isUserExists"> 
<wsdlsoap:operation soapAction=""/> 
<wsdl:input name="isUserExistsRequest"> 
<wsdlsoap:body use="literal"/> 
</wsdl:input> 
<wsdl:output name="isUserExistsResponse"> 
<wsdlsoap:body use="literal"/> 
</wsdl:output> 
</wsdl:operation> 
</wsdl:binding> 
<wsdl:service name="ElectronicArenaWebServiceService"> 
<wsdl:port binding="impl:ElectronicArenaWebServiceSoapBinding" name="ElectronicArenaWebService"> 
<wsdlsoap:address location="http://localhost:8080/ElectronicArenaLena/services/ElectronicArenaWebService"/> 
</wsdl:port> 
</wsdl:service> 
</wsdl:definitions> 
+0

你可以发布axis.log文件(或者任何你称之为的)吗? – nsawaya

+0

我在哪里可以找到这个文件? –

+0

通常它出现在与其他日志文件相同的位置(它可能取决于您使用的应用程序服务器)请参阅http://axis.apache.org/axis/java/developers-guide.html#Configuring_the_Logger 我有一个问题:您是否受JDK1.4限制使用轴1.4? 关于配置它,你可能需要(如果没有工作)下载log4j罐(最好来自maven仓库)http://www.mvnrepository.com/artifact/log4j/log4j 并把log4j.properties放入类路径 – nsawaya

回答

0

首先记:如果你使用的是Tomcat 7(?为什么不使用Axis 2)

的设置的Log4j(在时间轴1还在那里有log4j的,现在有一个更好的alternatives从Log4j中的同一作者,它被称为的logback - 但有一个新的Log4j 2,但现在我没有测试过,对于这种设置只随轴这里下载 http://archive.apache.org/dist/ws/axis/1_4/

创建一个log4j.properties文件和一个把它放在你的WEB-INF/classes文件夹中 (我创建了一个示例内容,以便你可以开始,可能需要查看日志4j的文档根据需要修改日志 - 下面创建多个日志文件(最大5),只要一个人的大小达到100k时就会创建另一个日志文件,您可能需要根据需要更改大小或数量或使用一个)

log4j.rootLogger=DEBUG, R 

log4j.appender.R=org.apache.log4j.RollingFileAppender 
log4j.appender.R.MaxFileSize=100KB 
log4j.appender.R.File=axis.log 
log4j.appender.R.MaxBackupIndex=5 
log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} – %m%n 

# below line might not be needed, but I just had it there 
log4j.R.org.apache.axis=DEBUG 

现已开放axis.jar和消除任何属性文件可以直接在文件夹结构(旁边的清单,并组织文件夹 - 我有simplelog.properties所以我删除了)

重新启动Tomcat和Apache检查Apache日志来确保log4j不会抛出任何警告或错误

如果一切正常,你应该能够且看axis.log中的Apache Tomcat的目录

注: 您可能注意到了很多无用的调试日志,但在发生异常时还是有些问题的发生可能是很方便的在这个级别的详细信息,请日志,再加上你可以随时禁用它,您需要,只需更换rootLogger调试到信息或评论log4j.properties一起

参考文献:

http://osdir.com/ml/text.xml.axis.user/2002-08/msg00436.html

http://axis.apache.org/axis/java/developers-guide.html#LoggingTracing