Passing a Java Object to ColdFusion

This is a continuation of this question: WCF and ColdFusion

So I managed to get the JAR to work with Metro and import the WSDL. My main class has the following functions: getVersion()and my implementation myVersion(), cancelOrder()and myCancel(), and, finally placeOrderand myOrder().

various methods

I can convey the right information and get a response from the first two methods of Web services ( getVersionand cancelOrder):

For example, in a method, myVersionit calls a web service and displays the version number plus the passed string:

<cfset var.myVersion = createObject("java", "com.USOrlando").myVersion(
    javaCast("string", "Batman")
)>
<!---Output is [version number] + "I'm Batman" --->

Using the same template, I can also pass all other parameters in the method myOrder, with the exception of the last type parameter org.tempuri.ArrayOfSmartOrderLineRequest.

Here I am not sure and may need guidance:

, , .

myOrder , ColdFusion, request.

<cfset var.01_00_myOrder = createObject("java", "com.USOrlando").myOrder(
    JavaCast("String", ExternalOrderId),
    JavaCast("int", CustomerID),
    .
    .
    .
    JavaCast("String", Phone),
    JavaCast("String", Email),
    JavaCast("org.tempuri.ArrayOfSmartOrderLineRequest", orderItems)
)>

, JavaCast("org.tempuri.ArrayOfSmartOrderLineRequest", orderItems) - .

JavaCast org.tempuri.ArrayOfSmartOrderLineRequest : byte, char, short, int, long, float, double, boolean, string, bigdecimal, (: int []) null.

. null, SoapMessage .

: ?

orderItems - CF, , , Java.

<!---Create Items --->
<cfset myItem = createObject("java", "org.tempuri.SmartOrderLineRequest")>
    <cfset myItem.PluSalesProgramId = myItem.setPLU(1)>
    <cfset myItem.PLU = myItem.setPLU("123456")>
    <cfset myItem.Quantity = myItem.setPLU(1)>
<!---Add Item --->
<cfset orderItems = createObject("java", "org.tempuri.ArrayOfSmartOrderLineRequest").getSmartOrderLineRequest().add(myItem)>

, ArrayOfSmartOrderLineRequest.java getSmartOrderLineRequest. java:

, . , JAXB. set smartOrderLineRequest. to: , , : getSmartOrderLineRequest().add(newItem);

, newItem add getSmartOrderLineRequest, ? , newItem, myItem, : PLU, PluSalesProgramId Quantity.

myItem CF, Java, getSmartOrderLineRequest ", ADD myItem ."

. , , , .

1: .

, , . , : :

<!---Create Items --->
<cfset myItem = createObject("java", "org.tempuri.SmartOrderLineRequest")>
    <cfset myItem.PluSalesProgramId = myItem.PluSalesProgramId(JavaCast("int", "1"))>
    <cfset myItem.PLU = myItem.setPLU(JavaCast("string", "123456"))>
    <cfset myItem.Quantity = myItem.setPLU(JavaCast("int", "1"))>
<!---Add Item --->
<cfset orderItems = createObject("java", "org.tempuri.ArrayOfSmartOrderLineRequest").getSmartOrderLineRequest().add(myItem)>
<!---Errors out on myItem.Quantity --->

, :

<!---Create Items --->
<cfset myItem = createObject("java", "org.tempuri.SmartOrderLineRequest")>
    <cfset myItem.PLU = myItem.setPLU(JavaCast("string", "123456"))>
<!---Add Item --->
<cfset orderItems = createObject("java", "org.tempuri.ArrayOfSmartOrderLineRequest").getSmartOrderLineRequest().add(myItem)>
<!---Errors out on myItem.Quantity --->

, :

<cfset var.01_00_myOrder = createObject("java", "com.USOrlando").myOrder(
    JavaCast("String", ExternalOrderId),
    JavaCast("int", CustomerID),
    .
    .
    .
    JavaCast("String", Phone),
    JavaCast("String", Email),
    orderItems
)>
<!---Returned Method Not Found error --->

ArrayOfSmartOrderLineRequest.java:

public class ArrayOfSmartOrderLineRequest {
    @XmlElement(name = "SmartOrderLineRequest", nillable = true)
    protected List<SmartOrderLineRequest> smartOrderLineRequest;

    public List<SmartOrderLineRequest> getSmartOrderLineRequest() {
        if (smartOrderLineRequest == null) {
            smartOrderLineRequest = new ArrayList<SmartOrderLineRequest>();
        }
        return this.smartOrderLineRequest;
    }
}

WSDL:

<xs:complexType name="ArrayOfSmartOrderLineRequest">
    <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" name="SmartOrderLineRequest" nillable="true" type="tns:SmartOrderLineRequest"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="SmartOrderLineRequest">
    <xs:sequence>
        <xs:element minOccurs="1" maxOccurs="1" name="PluSalesProgramId" nillable="true" type="xs:int"/>
        <xs:element minOccurs="0" maxOccurs="1" name="PLU" type="xs:string"/>
        <xs:element minOccurs="1" maxOccurs="1" name="Quantity" type="xs:int"/>
    </xs:sequence>
</xs:complexType>

2: Leigh

Psuedo-Code , .

1) , .

<cfset myItem = createObject("java", "org.tempuri.SmartOrderLineRequest")>

cfdump myItem :

cfdump myItem

PluSalesProgramId, PLU, Quantity.

2) .

<cfset myItem.setPluSalesProgramId(JavaCast("int", "1"))>
<cfset myItem.setPLU(JavaCast("string", "123456"))>
<cfset myItem.setQuantity(JavaCast("int", "1"))>

. * 3) CF.

<cfset itemArray = newArray(1)>
<cfset arrayAppend(itemArray, myItem)>

itemArray : itemArray dump

.

4) myItem ArrayOfSmartOrderLineRequest.

<cfset orderItems = createObject("java", "org.tempuri.ArrayOfSmartOrderLineRequest")>
<cfset orderItems.getSmartOrderLineRequest().add(myItem)>

5) , orderItems myOrder:

<cfset var.01_00_myOrder = createObject("java", "com.USOrlando").myOrder(
    JavaCast("String", ExternalOrderId),
    JavaCast("int", CustomerID),
    .
    .
    .
    JavaCast("String", Phone),
    JavaCast("String", Email),
    orderItems
)>

! ! , , , , , SOAP PLU .

, - , , .

+4
1

( )

ArrayOf, , ArrayOfSmartOrderLineRequest ( java.util.List), ArrayOfString. a) ( ..) b) , WSDL?

1:

, , .. SmartOrderLineRequest, (3) : PluSalesProgramId, PLU Quantity?

  • CF SmartOrderLineRequest
  • CF -, ArrayOfSmartOrderLineRequest, List
  • , -, .. ArrayOfSmartOrderLineRequest ( ) .

, - :

<!--- UNTESTED PSUEDO-CODE.... --->
<!--- create one or more items .... --->
<cfset myItem = createObject("java", "org.tempuri.SmartOrderLineRequest")>
<cfset myItem.setPLU( JavaCast("string", "123456") )>
<cfset myItem.setPluSalesProgramId( JavaCast("int", 111) )>
<cfset myItem.setQuantity( JavaCast("int", 25) )>

<!--- append items to array --->
<cfset itemArray = []>
<cfset arrayAppend(itemArray, myItem)>


<!--- pass array into wrapper object --->
<cfset wrapper = createObject("java", "org.tempuri.ArrayOfSmartOrderLineRequest")>
<!--- either using syntax 1 --->
<cfset wrapper.setSmartOrderLineRequest( itemArray )>
<!--- ... or possibly syntax 2 --->
<cfset wrapper.SmartOrderLineRequest = itemArray >


<!--- finally, pass wrapper object to appropriate method --->
<cfset orderObject = createObject("java", "com.USOrlando").myOrder(
             ....
             , wrapper )>

2:

, - , CF . -, .. ArrayOfSmartOrderLineRequest, .

<!--- create one or more items .... --->
<cfset myItem = createObject("java", "org.tempuri.SmartOrderLineRequest")>
<cfset myItem.setPLU( JavaCast("string", "123456") )>
<cfset myItem.setPluSalesProgramId( JavaCast("int", 111) )>
<cfset myItem.setQuantity( JavaCast("int", 25) )>

<!--- append items directly to wrapper  object --->
<cfset wrapper = createObject("java", "org.tempuri.ArrayOfSmartOrderLineRequest")>
<cfset wrapper.getSmartOrderLineRequest().add( itemArray )>     
....

<!--- finally, pass wrapper object to appropriate method --->
<cfset orderObject = createObject("java", "com.USOrlando").myOrder(
             ....
             , wrapper )>
+2

Source: https://habr.com/ru/post/1617346/


All Articles