2016-08-01 5 views
0

에 대한 사용자 지정 Java 구성 요소를 만들어 Excel 파일에 기반하여 처리합니다. 파일은 콘텐츠 ID에서 입력됩니다. Excel 파일을 읽은 후 응용 프로그램이 수행하는 첫 번째 작업 중 하나는 DOC_INFO_BY_NAME입니다. 짧은에서사용자 지정 WCC Java 서비스에서 DOC_INFO_BY_NAME을 (를) 호출 할 수 없습니다.

: 왜 이름으로하지 DOC_INFO_BY_NAMEdProcessingState을 찾을 수 있습니다이며 어떻게 해결합니까? 그러나


, 아래

자세한 내용 나는 다음과 같은 오류 메시지가 도착 할 때 'LOCALHOST16200000001'에 대한 DOC_INFO을 받고

오류. 'LOCALHOST16200000001'에 대한 정보를 검색 할 수 없습니다. 파일 형식 정보를 검색 할 수 없습니다. 'dProcessingState'매개 변수를 찾을 수 없습니다. [세부 내용]

오류가 발생했습니다. 아래의 스택 추적은 자세한 정보를 보여줍니다.

!$Error getting DOC_INFO for 'LOCALHOST16200000001'.!csUnableToGetRevInfo2,LOCALHOST16200000001!csUnableToGetFileFormatInfo!syParameterNotFound,dProcessingState 
intradoc.common.ServiceException: !csUnableToGetRevInfo2,LOCALHOST16200000001!csUnableToGetFileFormatInfo 
     at intradoc.server.ServiceRequestImplementor.buildServiceException(ServiceRequestImplementor.java:2176) 
     at intradoc.server.Service.buildServiceException(Service.java:2404) 
     at intradoc.server.Service.createServiceExceptionEx(Service.java:2398) 
     at intradoc.server.Service.createServiceException(Service.java:2393) 
     at intradoc.server.DocCommonHandler.getDocFormats(DocCommonHandler.java:271) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at intradoc.common.IdcMethodHolder.invokeMethod(IdcMethodHolder.java:86) 
     at intradoc.common.ClassHelperUtils.executeMethodReportStatus(ClassHelperUtils.java:324) 
     at intradoc.server.ServiceHandler.executeAction(ServiceHandler.java:79) 
     at intradoc.server.Service.doCodeEx(Service.java:622) 
     at intradoc.server.Service.doCode(Service.java:594) 
     at intradoc.server.ServiceRequestImplementor.doAction(ServiceRequestImplementor.java:1693) 
     at intradoc.server.Service.doAction(Service.java:566) 
     at intradoc.server.ServiceRequestImplementor.doActions(ServiceRequestImplementor.java:1483) 
     at intradoc.server.Service.doActions(Service.java:561) 
     at intradoc.server.ServiceRequestImplementor.executeActions(ServiceRequestImplementor.java:1415) 
     at intradoc.server.Service.executeActions(Service.java:547) 
     at intradoc.server.ServiceRequestImplementor.doRequestInternalEx(ServiceRequestImplementor.java:958) 
     at intradoc.server.ServiceRequestImplementor.executeServiceTopLevelSimple(ServiceRequestImplementor.java:1070) 
     at com.lowes.content.edam.massMetaDataUpdate.service.types.ServicesWrapper.executeService(ServicesWrapper.java:139) 
     at com.lowes.content.edam.massMetaDataUpdate.service.file.GetFileService.getDocInfo(GetFileService.java:478) 
     at com.lowes.content.edam.massMetaDataUpdate.service.ServiceFieldMapper.getMappings(ServiceFieldMapper.java:76) 
     at com.lowes.content.edam.massMetaDataUpdate.file.mapper.impl.FieldMapWorker.doInBackground(FieldMapWorker.java:107) 
     at com.lowes.content.edam.massMetaDataUpdate.file.mapper.impl.FieldMapWorker.doInBackground(FieldMapWorker.java:37) 
     at javax.swing.SwingWorker$1.call(SwingWorker.java:277) 
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
     at javax.swing.SwingWorker.run(SwingWorker.java:316) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 
     at java.lang.Thread.run(Thread.java:662) 
Caused by: intradoc.data.DataException: !syParameterNotFound,dProcessingState 
     at intradoc.data.DataBinder.getEx(DataBinder.java:1258) 
     at intradoc.data.DataBinder.get(DataBinder.java:1057) 
     at intradoc.server.DocCommonHandler.getProcessingState(DocCommonHandler.java:277) 
     at intradoc.server.DocCommonHandler.getDocFormats(DocCommonHandler.java:184) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at intradoc.common.IdcMethodHolder.invokeMethod(IdcMethodHolder.java:87) 
     at intradoc.common.ClassHelperUtils.executeMethodReportStatus(ClassHelperUtils.java:324) 
     at intradoc.server.ServiceHandler.executeAction(ServiceHandler.java:79) 
     at intradoc.server.Service.doCodeEx(Service.java:622) 
     at intradoc.server.Service.doCode(Service.java:595) 
     ... 20 more 

추가 서비스를 호출하는 여러 가지 방법을 시도했습니다.

public DataBinder executeService(DataBinder binder, Workspace workspace) 
     throws DataException, ServiceException 
{ 
    final String serviceName = binder.getLocal(Services.IdcService); 

    //check for REMOTE_USER 
    String username = binder.getEnvironmentValue("REMOTE_USER"); 

    if (null == username || "".equals(username.trim()))   
    { 
    log.warn("username not found, searching the binder."); 
    try { username = binder.get("dUser"); } 
    catch (DataException de) { log.error("Unable to get Username.", de); } 
    if (null != username && !"".equals(username.trim()))    
    { binder.setEnvironmentValue("REMOTE_USER", username); } 
    else { throw new IllegalStateException("Username required!"); } 
    } 

    //clear idcToken 
    binder.getLocalData().remove("idcToken"); 

    log.info("About to run '" + serviceName + "' as '" + username +"'"); 

    try 
    { 
    log.info("Calling service " + serviceName + ": " 
      + binder.getLocalData().toString()); 
    // Execute service 
    service.createRequestImplementor(); 
    service.getRequestImplementor() 
      .executeServiceTopLevelSimple(binder, serviceName, 
              service.getUserData()); 
    log.info("Finished calling service"); 
    return service.getBinder(); 
    } 
    catch (DataException e) 
    { 
    String msg = "Unexpected Failure executing service '"+serviceName+"'"; 
    log.info(msg, e); 
    throw e; //log and duck 
    } 
} 

dProcessingState을 찾을 WCC 수없고, 어떻게 그것을 해결합니까 :
현재 내가 사용하고 있는데?

답변

0

서비스를 호출하는 방법은 상당히 표준 적이며 그 이유라고 생각하지 않습니다. 내 첫 번째 추측은 다른 코드가 DOC_INFO_BY_NAME에 대한 호출을 방해하고 있다는 것입니다. 다른 모든 사용자 지정 코드를 사용하지 않도록 설정하고 (아마 쉽게 말한 것보다) 깨끗한 구성 요소로 서비스를 호출하면 작동 할 것입니다. 두 번째 후보는 사용자 지정 서비스가 실제로 FileService 여야하는지 다시 고려해야합니다. 그것이 결과에 영향을 미치는지는 확실하지 않지만, 시도해 볼만한 가치는있을 것입니다.

+0

'Intradoc.server.FileService'를 사용하고 있지 않습니다. 'GetFileService' 클래스 명은 역사적입니다. ** GET_FILE ** 및 ** DOC_INFO ** 기능을 하나의 클래스로 번들로 묶은 앱의 * CIS/RIDC * 버전에서 제공됩니다. – Raystorm

0

거의 나에게는 버그 인 것 같습니다.

getProcessingState는()는 DOC_INFO * 서비스로부터 호출 getDocFormats()에서 호출된다.

getProcessingState() 코드는 먼저 dProcessingState을 검색합니다. 이 null의 경우

String curProcState = this.m_binder.get("dProcessingState"); 

다음에, 검사 : 그러나

if (curProcState != null) 

, 그것은 널 점검에 도달하지 않습니다. DataBinder.get()가에 전달 된 키 값을 요구하고 있기 때문이다 (이 경우 dProcessingState에.)

이 서비스를 호출하기 전에 DataBinder에 값을 dProcessingState 설정을 시도.

binder.setLocal("dProcessingState", "ignore"); 
+0

바인더에 추가하면 누락 된 항목과 다른 오류가 발생합니다. – Raystorm

0

문제는 완전히 내 잘못이었습니다. 나는 공상에 시달려 왔고, 나를 더 쉽게 사용할 수 있도록 Databinder을 확장했다. 내 확장 기능에 결함이 있음을 알게되었습니다. 바인더에서 기본 데이터로 롤백하고 바인더에서 데이터를 다시 검사하여 문제를 해결했습니다.