0
JAX-WSによって公開されているWebサービスを消費しようとしています。 ローカル環境でnusoap呼び出しを実行すると、要求されたすべてのデータが提供されます。しかし、一度JavaアプリケーションをDev環境にデプロイすると、サーバ側からnullポインタ例外が返されます。単純なnusoapリクエストはjava.lang.nullPointerExceptionを返します
以下は、自分のコードのスニペットです(JAX WSを使用したことがないので、必要な情報を提供してうれしいです)。前もって感謝します!!!
(関連するセクション)以下の例のURLに掲載されたXMLファイル、
http://services.myapp.dev.com:8080/myapp-1.0-SNAPSHOT/MyService?wsdl
/*コンテンツ*/
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>
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");
}
}
}
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;
}
?>