简单nusoap请求返回java.lang.nullPointerException
我正在尝试使用JAX-WS发布的Web服务,这是我以前从未使用过的,请耐心等待。 在本地环境中执行nusoap调用时,它提供所有请求的数据。然而,一旦我将java应用程序部署到我的开发环境中,它就会从服务器端返回一个空指针异常 下面是我的代码片段(我很乐意提供您可能需要的任何进一步信息,因为我以前从未使用过JAX WS)。提前感谢 XML文件,发布在下面的示例url中(相关部分) /*内容*/简单nusoap请求返回java.lang.nullPointerException,java,web-services,jax-ws,Java,Web Services,Jax Ws,我正在尝试使用JAX-WS发布的Web服务,这是我以前从未使用过的,请耐心等待。 在本地环境中执行nusoap调用时,它提供所有请求的数据。然而,一旦我将java应用程序部署到我的开发环境中,它就会从服务器端返回一个空指针异常 下面是我的代码片段(我很乐意提供您可能需要的任何进一步信息,因为我以前从未使用过JAX WS)。提前感谢 XML文件,发布在下面的示例url中(相关部分) /*内容*/ This XML file does not appear to have any style inf
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<!--
Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.7-b01 svn-revision#${svn.Last.Changed.Rev}.
-->
<!--
Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.7-b01 svn-revision#${svn.Last.Changed.Rev}.
-->
<definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.myapp.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://service.myapp.com/" name="MyServiceService">
<types>
<xsd:schema>
<xsd:import namespace="http://service.myapp.com/" schemaLocation="http://services.myapp.com:8080/myapp-1.0-SNAPSHOT/MyService?xsd=1"/>
</xsd:schema>
</types>
<message name="SearchDailyRecords">
<part name="parameters" element="tns:SearchDailyRecords"/>
</message>
<message name="SearchDailyRecordsResponse">
<part name="parameters" element="tns:SearchDailyRecordsResponse"/>
</message>
<portType name="MyService">
<operation name="SearchDailyRecords">
<input wsam:Action="http://services.myapp.com:8080/myapp-1.0-SNAPSHOT/MyService/SearchDailyRecordsRequest" message="tns:SearchDailyRecords"/>
<output wsam:Action="http://services.myapp.com:8080/myapp-1.0-SNAPSHOT/MyService/SearchDailyRecordsResponse" message="tns:SearchDailyRecordsResponse"/>
<fault message="tns:Exception" name="Exception" wsam:Action="http://services.myapp.com:8080/myapp-1.0-SNAPSHOT/MyService/SearchDailyRecords/Fault/Exception"/>
</operation>
</portType>
<binding name="MyServicePortBinding" type="tns:MyService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="SearchDailyRecords">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
<fault name="Exception">
<soap:fault name="Exception" use="literal"/>
</fault>
</operation>
</binding>
<service name="MyServiceService">
<port name="MyServicePort" binding="tns:MyServicePortBinding">
<soap:address location="http://services.myapp.com:8080/myapp-1.0-SNAPSHOT/MyService"/>
</port>
</service>
</definitions>
此XML文件似乎没有任何与之关联的样式信息。文档树如下所示。
Java后端服务:
@Override
public @WebResult(name = "response")
List<SearchDailyRecordsResponse> SearchDailyRecords(@WebParam(name = "employeeId") @XmlElement(required = true) String employeeId, @WebParam(name = "date") @XmlElement(required = true) String date) throws Exception {
SearchDailyRecordsRequest request = new SearchDailyRecordsRequest();
request.employeeId = employeeId;
request.date = date;
try {
IDailyRecordDAO dailyRecordDAO = (IDailyRecordDAO) DAOFactory.getInstance().getDAO("DailyRecord");
List<DailyRecord> dailyRecords = registroGenericoDAO.get(request.employeeId, request.date);
List<SearchDailyRecordsResponse> response = new ArrayList<SearchDailyRecordsResponse>();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
for (DailyRecord dailyRecord : dailyRecords) {
SearchDailyRecordsResponse searchDailyRecords = new SearchDailyRecordsResponse();
searchDailyRecords.recordId = dailyRecord.getRecord().getId();
/* some other info populating record */
response.add(searchDailyRecords);
}
return response;
} catch (Exception e) {
Logger.getLogger(MyService.class.getName()).log(Level.WARNING, null, e);
throw new Exception("Error getting daily records");
}
}
}
@覆盖
public@WebResult(name=“response”)
列出SearchDailRecords(@WebParam(name=“employeeId”)@XmlElement(required=true)字符串employeeId,@WebParam(name=“date”)@XmlElement(required=true)字符串日期)引发异常{
SearchDailyRecordsRequest请求=新建SearchDailyRecordsRequest();
request.employeeId=employeeId;
request.date=日期;
试一试{
IDailyRecordDAO dailyRecordDAO=(IDailyRecordDAO)DAOFactory.getInstance().getDAO(“DailyRecord”);
List dailyRecords=registroGenericoDAO.get(request.employeeId,request.date);
列表响应=新建ArrayList();
SimpleDataFormat sdf=新的SimpleDataFormat(“日/月/年”);
用于(DailyRecord DailyRecord:dailyRecords){
SearchDailyRecordsResponse searchDailyRecords=新建SearchDailyRecordsResponse();
searchDailyRecords.recordId=dailyRecord.getRecord().getId();
/*其他一些信息填充记录*/
响应。添加(searchDailyRecords);
}
返回响应;
}捕获(例外e){
Logger.getLogger(MyService.class.getName()).log(Level.WARNING,null,e);
抛出新异常(“获取每日记录时出错”);
}
}
}
PHP测试脚本
<?php
require_once('../backend/libraries/nusoap/nusoap.php');
$url = "http://services.myapp.com:8080/myapp-1.0-SNAPSHOT/MyService?wsdl";
ini_set("soap.wsdl_cache_enabled", "0");
$client = new nusoap_client($url, 'wsdl');
try {
echo 'try: ';
/* date("d/m/Y") --> DATE FORMAT */
$date = '06/05/2016';
$request = array(
'employeeId' => 1234,
'date' => $date
);
$response = $client->call('SearchDailyRecords', array('request' => $request));
//die('<pre>'.print_r($client, true).'</pre>');
if ($client->fault) {
echo 'fault?: ';
echo "<h2>Fault</h2><pre>";
print_r($response);
echo "</pre>";
} else {
$error = $client->getError();
if ($error) {
echo "<h2>Error</h2><pre>" . $error . "</pre>";
} else {
echo "<h2>Main</h2>";
echo $response;
}
}
// show soap request and response
echo "<h2>Request</h2>";
echo "<pre>" . htmlspecialchars(formatXmlString($client->request), ENT_QUOTES) . "</pre>";
echo "<h2>Response</h2>";
echo "<pre>" . htmlspecialchars(formatXmlString($client->response), ENT_QUOTES) . "</pre>";
/******************************************/
} catch (SoapFault $exc) {
die('<pre>' . print_r($exc, true) . '</pre>');
}
function formatXmlString($xml){
$xml = preg_replace('/(>)(<)(\/*)/', "$1\n$2$3", $xml);
$token = strtok($xml, "\n");
$result = '';
$pad = 0;
$matches = array();
while ($token !== false) :
if (preg_match('/.+<\/\w[^>]*>$/', $token, $matches)) :
$indent=0;
elseif (preg_match('/^<\/\w/', $token, $matches)) :
$pad--;
$indent = 0;
elseif (preg_match('/^<\w[^>]*[^\/]>.*$/', $token, $matches)) :
$indent=1;
else :
$indent = 0;
endif;
$line = str_pad($token, strlen($token)+$pad, ' ', STR_PAD_LEFT);
$result .= $line . "\n";
$token = strtok("\n");
$pad += $indent;
endwhile;
return $result;
}
?>
request),ENT\u引号)。"";
回应“回应”;
“回声”。htmlspecialchars(formatXmlString($client->response),ENT\u引号)。"";
/******************************************/
}捕获(SoapFault$exc){
模具(''.print\u r($exc,true.'');
}
函数formatXmlString($xml){
$xml=preg_replace(“/(>)($/”,$token,$matches)):
$indent=0;
elseif(preg_match('/^.*$/',$token,$matches)):
$indent=1;
其他:
$indent=0;
endif;
$line=str_pad($token,strlen($token)+$pad',,str_pad_LEFT);
$result.=$line.“\n”;
$token=strtok(“\n”);
$pad+=$indent;
结束时;
返回$result;
}
?>
经过一些研究,我发现了问题所在以及如何解决,因此我在这里发布了我所做的,以防其他人遇到类似问题:
在请求部署到开发的Tomcat服务器日志后,我发现以下异常:
因此,我认为没有加载新的类和DAO,这是通过将条目添加到我的context.xml文件(位于META-INF文件夹中)来解决的
之后,我重建了应用程序,并毫无问题地部署了新生成的.war文件
<?php
require_once('../backend/libraries/nusoap/nusoap.php');
$url = "http://services.myapp.com:8080/myapp-1.0-SNAPSHOT/MyService?wsdl";
ini_set("soap.wsdl_cache_enabled", "0");
$client = new nusoap_client($url, 'wsdl');
try {
echo 'try: ';
/* date("d/m/Y") --> DATE FORMAT */
$date = '06/05/2016';
$request = array(
'employeeId' => 1234,
'date' => $date
);
$response = $client->call('SearchDailyRecords', array('request' => $request));
//die('<pre>'.print_r($client, true).'</pre>');
if ($client->fault) {
echo 'fault?: ';
echo "<h2>Fault</h2><pre>";
print_r($response);
echo "</pre>";
} else {
$error = $client->getError();
if ($error) {
echo "<h2>Error</h2><pre>" . $error . "</pre>";
} else {
echo "<h2>Main</h2>";
echo $response;
}
}
// show soap request and response
echo "<h2>Request</h2>";
echo "<pre>" . htmlspecialchars(formatXmlString($client->request), ENT_QUOTES) . "</pre>";
echo "<h2>Response</h2>";
echo "<pre>" . htmlspecialchars(formatXmlString($client->response), ENT_QUOTES) . "</pre>";
/******************************************/
} catch (SoapFault $exc) {
die('<pre>' . print_r($exc, true) . '</pre>');
}
function formatXmlString($xml){
$xml = preg_replace('/(>)(<)(\/*)/', "$1\n$2$3", $xml);
$token = strtok($xml, "\n");
$result = '';
$pad = 0;
$matches = array();
while ($token !== false) :
if (preg_match('/.+<\/\w[^>]*>$/', $token, $matches)) :
$indent=0;
elseif (preg_match('/^<\/\w/', $token, $matches)) :
$pad--;
$indent = 0;
elseif (preg_match('/^<\w[^>]*[^\/]>.*$/', $token, $matches)) :
$indent=1;
else :
$indent = 0;
endif;
$line = str_pad($token, strlen($token)+$pad, ' ', STR_PAD_LEFT);
$result .= $line . "\n";
$token = strtok("\n");
$pad += $indent;
endwhile;
return $result;
}
?>
SEVERE: null
com.myappconfiguration.ConfigurationException: La variable DailyRecord no existe!
at com.myapp.Configuration.getEnvironmentVariable(Configuration.java:17)
at com.myapp.dao.DAOFactory.LoadDaoFromFile(DAOFactory.java:57)
at com.myapp.dao.DAOFactory.getDAO(DAOFactory.java:42)
at com.myapp.service.MyAppService.SeachDailyRecords(MyAppService.java:515)
at sun.reflect.GeneratedMethodAccessor322.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.xml.ws.api.server.InstanceResolver$1.invoke(InstanceResolver.java:250)
at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:149)
at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:88)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1063)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:979)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:950)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:825)
at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:380)
at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:651)
at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:264)
at com.sun.xml.ws.transport.http.servlet.ServletAdapter.invokeAsync(ServletAdapter.java:218)
at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:159)
at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:194)
at com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: javax.naming.NameNotFoundException: Name [DailyRecord] is not bound in this Context. Unable to find [DailyRecord].
at org.apache.naming.NamingContext.lookup(NamingContext.java:820)
at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
at com.myappconfiguration.Configuration.getEnvironmentVariable(Configuration.java:14)
<Environment name="DailyRecord" override="false" type="java.lang.String" value="com.myapp.dao.oracle.DailyRecordDAO"/>