【问题标题】:Accessing Jar File Classes and Methods with ColdFusion使用 ColdFusion 访问 Jar 文件类和方法
【发布时间】:2015-09-01 12:52:05
【问题描述】:

我有一个 jar 文件,提取时有以下路径

 xmlcreator.jar

 xmlcreator (folder)
     xmlpackage (folder)
         data1.class
         xxxx.class
             createxml (method)

如果我像下面这样创建 myObj1,我可以查看 data1 中的所有字段,并且 field1 包含 value1。

 <cfset myObj1 = createObject("java","xmlpackage.data1") />
 <cfset myObj1.field1 = "value1">
 <cfdump var="#myObj1#">

我想在填充 data1 类中的所有字段后创建 xml。 xxxx.class 具有创建 xml 文件的方法 createxml 但是,如果我尝试以下操作,那么 createxml 似乎不知道 data1。

 <cfset myObj2 = createObject("java","xmlpackage.xxxx”) />
 <cfset myObj2.data1 = myobj1 />
 <cfset return = myObj2.createxml()>

ColdFusion 错误只是在错误顶部返回 data1,没有任何解释。因此,通过创建对象 xmlpackage.xxxx,我似乎无法访问 data1。

我是否将数据放入 data1 类并获取 xxxx.createxml 以创建 xml 文件?

更新:

很抱歉给您带来了困惑。我认为保持简单会很容易。我已经按照我尝试执行的顺序添加了代码、对象的转储和错误的堆栈跟踪。

<cfset myObj = createObject("java","CDAPackage.PatientRole") />
<cfset myObj.patientFamilyName = "Jones">
<cfdump var="#myObj#">

<cfset ccdaObj = createObject("java","CDAPackage.CCDA") />
<cfdump var="#ccdaObj#">
<cfset ccdaObj.PatientRole = myobj />
<cfset x = ccdaObj.GenerateCCDA()>
<cfdump var="#x#">

myObj 的转储

object of CDAPackage.PatientRole
Class Name  CDAPackage.PatientRole
Methods 
Method  Return Type
getRaceList()   java.util.List
setRaceList(java.util.List) void
Fields  
Field   Value
java.util.List RaceList [undefined value]
java.lang.String administrativeGenderCode   [undefined value]
java.lang.String administrativeGenderDisplayName    [undefined value]
CDAPackage.Address birthPlaceAddress    CDAPackage.Address
java.lang.String birthTime  [undefined value]
java.lang.String ethnicGroupCode    [undefined value]
java.lang.String ethnicGroupCodeDisplayName [undefined value]
java.lang.String insuranceProvider  [undefined value]
java.lang.String languageCommunication  [undefined value]
java.lang.String languageCommunicationDisplayname   [undefined value]
java.lang.String languageCommunicationModeCodeCode  [undefined value]
java.lang.String languageCommunicationModeCodeDisplayName   [undefined value]
java.lang.String languageCommunicationPreferenceInd [undefined value]
java.lang.String maritalStatusCode  [undefined value]
java.lang.String maritalStatusDisplayName   [undefined value]
java.lang.String mrn    [undefined value]
CDAPackage.Address patientAddress   CDAPackage.Address
java.lang.String patientFamilyName  Jones
... more fields

ccdaObj 转储

object of CDAPackage.CCDA
Class Name  CDAPackage.CCDA
Methods 
Method  Return Type
GenerateCCDA()  java.lang.String
Fields  
Field   Value
java.lang.String CCDACode   [undefined value]
java.lang.String CCDADisplayName    [undefined value]
java.lang.String CCDAEffectiveTimeValue [undefined value]
java.lang.String Chiefcomplaint [undefined value]
java.lang.String DocumentID [undefined value]
java.lang.String EHRID  [undefined value]
java.lang.String EHRName    [undefined value]
CDAPackage.Address FacilityAddressObj   CDAPackage.Address
java.util.List FunctionalStatusListObj  java.util.List
CDAPackage.AssignedPerson PrimaryProviderObj    CDAPackage.AssignedPerson
java.util.List ReferralListObj  java.util.List
java.util.List allergyListObj   java.util.List
java.util.List carePlanListObj  java.util.List
java.util.List careTeamObj  java.util.List
java.lang.String dischargeinstructions  [undefined value]
java.util.List encounterDiagnosisListObj    java.util.List
java.util.List encounterListObj java.util.List
java.util.List immunizationListObj  java.util.List
java.util.List instructionListObj   [undefined value]
java.util.List medicationAdministedListObj  java.util.List
java.util.List medicationListObj    java.util.List
CDAPackage.PatientRole patientRoleObj   CDAPackage.PatientRole
... more fields

堆栈跟踪

 java.lang.NoSuchFieldException: PATIENTROLE
     at coldfusion.runtime.StructBean.bindName(StructBean.java:243)
     at coldfusion.runtime.Scope.put(Scope.java:74)
     at coldfusion.runtime.CfJspPage._arrayset(CfJspPage.java:1093)
     at     coldfusion.runtime.NeoPageContext.SymTab_setSplitNameInMap(NeoPageContext.java:1429)
at coldfusion.runtime.CfJspPage._structSetAt(CfJspPage.java:2356)
at cfdllcall2ecfm1400054296.runPage(/Applications/ColdFusion11/cfusion/wwwroot/test/dllcall.cfm:16)
at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:246)
at ...

【问题讨论】:

  • Java 对象错误通常在堆栈跟踪中发现。你能发布完整的堆栈跟踪吗?此外,请检查 CF 错误日志。这个 jar 有公共 API 吗?
  • 很难说没有看到 API,但我怀疑这种语法 myObj1.field1 = "value1" 实际上并没有像您期望的那样设置“字段”值。 Per the docs,仅在以下情况下才支持该语法 a) "..该类将 ["fields"] 公开为公共属性..." 或 b) 属性不是公共的,而是对象"...是一个 JavaBean,它提供 get_PropertyName_() 和 set_PropertyName_(value)...形式的公共 getter 和 setter 方法...".
  • 我添加了堆栈跟踪。
  • 我添加了 myObj1 的转储
  • 不用担心。有时保持简单是有效的。与自定义类无关。从转储中,看起来字段名称是“patientRoleObj”,而不是“patientRole”。 (很难判断该字段是否公开。您必须查看 API 文档)。尝试使用:object.patientRoleObj = yourPatientRoleObject.

标签: java xml jar coldfusion


【解决方案1】:

(来自 cmets)

java.lang.NoSuchFieldException: PATIENTROLE

查看转储中的字段,您尝试设置的字段的名称似乎是patientRoleObj,而不是patientRole。尝试改用该字段名称:

<cfset yourOtherObject.patientRoleObj = yourPatientRoleObject />

【讨论】:

    猜你喜欢
    • 2016-08-29
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2013-09-29
    • 1970-01-01
    • 2013-07-16
    相关资源
    最近更新 更多