Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单nusoap请求返回java.lang.nullPointerException_Java_Web Services_Jax Ws - Fatal编程技术网

简单nusoap请求返回java.lang.nullPointerException

简单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

我正在尝试使用JAX-WS发布的Web服务,这是我以前从未使用过的,请耐心等待。 在本地环境中执行nusoap调用时,它提供所有请求的数据。然而,一旦我将java应用程序部署到我的开发环境中,它就会从服务器端返回一个空指针异常

下面是我的代码片段(我很乐意提供您可能需要的任何进一步信息,因为我以前从未使用过JAX WS)。提前感谢

XML文件,发布在下面的示例url中(相关部分)

/*内容*/

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"/>