2017-03-09 1 views
0

전에 JAX-WS에서 게시 한 웹 서비스를 사용하려고합니다. 로컬 환경에서 nusoap 호출을 수행 할 때 요청 된 모든 데이터가 제공됩니다. 그러나 일단 내 Dev 환경에 Java 응용 프로그램을 배포하면 서버 측에서 널 포인터 예외를 리턴합니다.간단한 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> 

자바 백엔드 서비스 :

@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 테스트 스크립트

배포 톰캣 서버 로그를 요청하면

: 433,210

답변

0

은 몇 가지 조사 후, 나는 다른 유사한 문제에 건너 온다 나는 경우 누군가에 무슨 짓을 게시하도록하겠습니다, 그래서 여기에 문제가 있었고 그것을 어떻게 해결하는 것을 발견

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) 

그래서 나는 새로운 클래스를 생각하고 DAO가로드되지 않았합니다 (META-INF 폴더에있는) 내의 context.xml 파일에 항목을 추가하여 해결되었습니다 : 개발에, 나는이 예외를 발견

<Environment name="DailyRecord" override="false" type="java.lang.String" value="com.myapp.dao.oracle.DailyRecordDAO"/> 

그 일을 한 후에 나는 앱을 재건하고 문제없이 새로 생성 된 .war 파일을 배포했습니다.

관련 문제