Java - JAXB

   
Vista:

JAXB

Publicado por Rocio (22 intervenciones) el 03/06/2015 18:18:18
HOLA !!
BUENOS DIAS QUISIERA QUE ME AYUDEN DESDE HACE VARIOS DIAS QUE ESTOY BATALLANDO
MI PROBLEMA ES COMO ENVIOS MIS DATOS DE CONSULTA DE UNA BASE DE DATOS A UN htttpcliente o url
ESTOY USANDO LA API QUE ME PROPORCIONO UPS Y ES UN POCO DIFICL
PUEDO ENVIAR UNO Y OBTENER LA RESPUESTA PERO QUIERO ENVIAR TODOS DE MANERA AUTOMATICA QUI ESTA MI CODIGO.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
package com.ups.xolt.codesamples;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Properties;
 
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
 
import com.ups.xolt.codesamples.accessrequest.jaxb.AccessRequest;
import com.ups.xolt.codesamples.request.jaxb.Request;
import com.ups.xolt.codesamples.request.jaxb.TrackRequest;
import com.ups.xolt.codesamples.response.jaxb.TrackResponse;
 
 
public class PODPTM {
    	private static final String LICENSE_NUMBER = "accesskey";
	private static final String USER_NAME = "username";
	private static final String PASSWORD = "password";
	private static final String ENDPOINT_URL="url";
 
	private static final String OUT_FILE_LOCATION = "out_file_location";
 
        private static Properties props = null;
	private static String description = null;
    static {
    	props = new Properties();
 
    	try{
    		props.load(new FileInputStream("./build.properties"));
    	}catch (Exception e) {
			description = e.toString();
			updateResultsToFile(description);
    		e.printStackTrace();
		}
    }
 
public void principal(){
 
StringWriter strWriter =null;
 
 for (int f=0; f<5; f++)
     try {
 
        	//Create JAXBContext and marshaller for AccessRequest object
 
                        JAXBContext accessRequestJAXBC = JAXBContext.newInstance(AccessRequest.class.getPackage().getName() );
			Marshaller accessRequestMarshaller = accessRequestJAXBC.createMarshaller();
			com.ups.xolt.codesamples.accessrequest.jaxb.ObjectFactory accessRequestObjectFactory = new com.ups.xolt.codesamples.accessrequest.jaxb.ObjectFactory();
			AccessRequest accessRequest = accessRequestObjectFactory.createAccessRequest();
			populateAccessRequest(accessRequest); //esto ejecuta el metodo donde ingreesas el usuario
 
                        //Create JAXBContext and marshaller for TrackRequest object
			JAXBContext trackRequestJAXBC = JAXBContext.newInstance(TrackRequest.class.getPackage().getName() );
			Marshaller trackRequestMarshaller = trackRequestJAXBC.createMarshaller();
			com.ups.xolt.codesamples.request.jaxb.ObjectFactory requestObjectFactory = new com.ups.xolt.codesamples.request.jaxb.ObjectFactory();
			TrackRequest trackRequest = requestObjectFactory.createTrackRequest();
			populateTrackRequest(trackRequest);// este metodo realializa la coneccion y escritura de  tracking 
 
			//Get String out of access request and track request objects
                        strWriter = new StringWriter();
                        accessRequestMarshaller.marshal(accessRequest, strWriter);
			trackRequestMarshaller.marshal(trackRequest, strWriter);
			strWriter.flush();
			strWriter.close();
 
                        System.out.println("Request: " + strWriter.getBuffer().toString());
 
			String strResults =contactService(strWriter.getBuffer().toString());
 
			//Parse response object
			JAXBContext trackResponseJAXBC = JAXBContext.newInstance(TrackResponse.class.getPackage().getName());
			Unmarshaller trackUnmarshaller = trackResponseJAXBC.createUnmarshaller();
			ByteArrayInputStream input = new ByteArrayInputStream(strResults.getBytes());
			Object objResponse = trackUnmarshaller.unmarshal(input);
			TrackResponse trackResponse = (TrackResponse)objResponse;
			System.out.println("Response Status: " + trackResponse.getResponse().getResponseStatusCode());
			System.out.println("Response Status Description: " + trackResponse.getResponse().getResponseStatusDescription());
		        //System.out.println("Inquiry Number: " + trackResponse.getShipment().get(0).getInquiryNumber().getValue());
                       // System.out.println("Current Status Code: " + trackResponse.getShipment().get(0).getCurrentStatus().getCode());
			//System.out.println("Current Status Description: " + trackResponse.getShipment().get(0).getCurrentStatus().getDescription());
 
			updateResultsToFile(strResults);
        } catch (Exception e) {
        	description = e.toString();
 
        	updateResultsToFile(description);
			e.printStackTrace();
		} finally{
 
			try{
				if(strWriter != null){
         				strWriter.close();
					strWriter = null;
				}
			}catch (Exception e) {
				e.printStackTrace();
                        }
 
    }
 
}
 
 public static String contactService(String xmlInputString) throws Exception{
 
          String outputStr = null;
		OutputStream outputStream = null;
 
           	try {
 
			URL url = new URL(props.getProperty(ENDPOINT_URL));
 
			HttpURLConnection connection = (HttpURLConnection) url.openConnection();
 
                        System.out.println("Client established connection with " + url.toString());
			//Setup HTTP POST parameters
			connection.setDoOutput(true);
			connection.setDoInput(true);
			connection.setUseCaches(false);
 
			outputStream = connection.getOutputStream();
			outputStream.write(xmlInputString.getBytes());
			outputStream.flush();
			outputStream.close();
			System.out.println("Http status = " +connection.getResponseCode() + " " +connection.getResponseMessage());
 
			outputStr = readURLConnection(connection);
			connection.disconnect();
		} catch (Exception e) {
			System.out.println("Error sending data to server");
			e.printStackTrace();
			throw e;
		} finally {
			if(outputStream != null){
				outputStream.close();
			}
		}
		return outputStr;
	}
 
	/**
	 * This method read all of the data from a URL connection to a String
	 */
	public static String readURLConnection(URLConnection uc) throws Exception {
 
            StringBuffer buffer = new StringBuffer();
		BufferedReader reader = null;
 
		try {
			reader = new BufferedReader(new InputStreamReader(uc.getInputStream())); // lee la salida del servidor
 
                   int letter =0;
 
			while ((letter = reader.read())!=-1)
                      	buffer.append((char)letter);
 
			reader.close();
		} catch (Exception e) {
		System.out.println("Could not read from URL: " + e.toString());
			throw e;
 
		} finally {
			if(reader != null){
				reader.close();
				reader = null;
			}
		}
		return buffer.toString();
	}
 
    /**
     * Populates the access request object.
     * @param accessRequest
     */
    public  static void populateAccessRequest(AccessRequest accessRequest){
    	accessRequest.setAccessLicenseNumber(props.getProperty(LICENSE_NUMBER));
    	accessRequest.setUserId(props.getProperty(USER_NAME));
    accessRequest.setPassword(props.getProperty(PASSWORD));
    }
   public static void populateTrackRequest(TrackRequest trackRequest ){
 
        Request request = new Request();
        List<String> optoinsList = request.getRequestOption();
 
        request.setRequestAction("Track");
        trackRequest.setRequest(request);   //If the request option here is of 2 ~ 15, then Signature tracking must validate the rights to signature tracking.
        trackRequest.setTrackingNumber("1Z6X73190341928947");
        trackRequest.setIncludeFreight("01");
    }
  /*
     * This method updates the XOLTResult.xml file with the received status and description
     * @param statusCode
     * @param description
     */
 
    public  static void updateResultsToFile(String response){
 
        BufferedWriter bw = null;
    	try{
 
            File outFile = new File(props.getProperty(OUT_FILE_LOCATION));
                System.out.println("Output file deletion status: " + outFile.delete());
          	outFile.createNewFile();
             System.out.println("Output file location: " + outFile.getAbsoluteFile());
                bw = new BufferedWriter(new FileWriter(outFile));
     		bw.write(response);
     		bw.close();
    	}catch (Exception e) {
			e.printStackTrace();
		}finally{
			try{
				if (bw != null){
					bw.close();
					bw = null;
				}
			}catch (Exception e) {
				e.printStackTrace();
   			}
		}
    }
}



Y ESTOS SON LOS DATOS QUE QUIERO NEVIAR TODO JUNTOS ESTOS SON OBTENIDOS DE MI BASE DE DATOS. SERIAN TAN AMABLES DE AYUDARME ESTOY MUY CONFUNDIDA SOY NUEVA EN ESTO Y SI ME URGUE TERMINARLO :(
ESTO SOLO ALGUNOS !!!
1Z6X7319034225830
1Z6X7319034110596
1Z6X7319034197562
1Z6X7319034185658
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

JAXB

UPS Tracking XML Developers Guide.

1.8.2 Tracking

Tracking relies on a single request and response. Client applications request tracking information by sending a TrackRequest message to UPS. UPS replies with a TrackResponse message.
Example TrackRequest Message:

<?xml version="1.0" ?>
<AccessRequest xml:lang='en-US'> <AccessLicenseNumber>YOURACCESSLICENSENUMBER</AccessLicenseNumber> <UserId>YOURUSERID</UserId> <Password>YOURPASSWORD</Password> </AccessRequest> <?xml version="1.0" ?>
<TrackRequest>
<Request> <TransactionReference>
<CustomerContext>guidlikesubstance</CustomerContext> </TransactionReference> <RequestAction>Track</RequestAction>
</Request>
<TrackingNumber>1Z9999999999999999</TrackingNumber>
</TrackRequest>

Example TrackResponse Message:
<?xml version="1.0" ?> <TrackResponse> <Response> <TransactionReference> <CustomerContext>guidlikesubstance</CustomerContext> <XpciVersion>1.0</XpciVersion> </TransactionReference> <ResponseStatusCode>1</ResponseStatusCode> <ResponseStatusDescription>Success</ResponseStatusDescription> </Response> <Shipment> <Shipper> <ShipperNumber>123X67</ShipperNumber> </Shipper> <ShipTo> <Address> <City>Timonium</City> <StateProvinceCode>MD</StateProvinceCode> <CountryCode>US</CountryCode> </Address> </ShipTo> <Service> <Code>03</Code> <Description>Ground</Description> </Service> <Package> <TrackingNumber>1Z9999999999999999</TrackingNumber> <Activity> <ActivityLocation> <Address><City>Timonium</City> <StateProvinceCode>MD</StateProvinceCode> <CountryCode>US</CountryCode> </Address> <Code>DL</Code> <Description>Delivered</Description> </ActivityLocation> <Status> <StatusType> <Code>XX</Code> <Description>Status XX</Description> </StatusType> <StatusCode> <Code>YY</Code> <Description>Code YY</Description> </StatusCode> </Status> </Activity> </Package> </Shipment> </TrackResponse>


Así que creo que tienes que hacer una petición por cada tracking id.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

JAXB

no me queda claro, es decir es por petición respuesta, pero el ejemplo no indica si se puede enviar mas de un Tracking id. si tienes acceso ablos schemas del XML, revisa la cardinalidad de ese campo o con el soap ui prueba agregando mas tracking ids
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

JAXB

Publicado por Rocio (22 intervenciones) el 04/06/2015 19:19:24
si es una peticion por respuesta pero lo que quiero hacer hacer varias peticiones y obviamente obtener las respuestas de cada uno y estas a su vez se almacenan en en mi c:/ user .. entonces yo quiero enviar varios Tracking Number de manera Automatizada

esta el que envio para obtener el AccessRequest

<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2007 sp2 (http://www.altova.com) by Jia Wang (ups) -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ups="http://www.ups.com/XMLSchema" elementFormDefault="unqualified">
<xsd:element name="AccessRequest">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="AccessLicenseNumber" type="xsd:string"/>
<xsd:element name="UserId" type="xsd:string"/>
<xsd:element name="Password" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
y este el :
TracRequest

<xsd:schema xmlns:ups="http://www.ups.com/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified">
<xsd:element name="TrackRequest">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Request"/>
<xsd:choice>
<xsd:element ref="TrackingNumber"/>
<xsd:element ref="ShipmentIdentificationNumber"/>
<xsd:element ref="CandidateBookmark"/>
<xsd:sequence>
<xsd:element ref="ReferenceNumber"/>
<xsd:element ref="PickupDateRange" minOccurs="0"/>
<xsd:element ref="ShipperNumber" minOccurs="0"/>
<xsd:element ref="DestinationPostalCode" minOccurs="0"/>
<xsd:element ref="DestinationCountryCode" minOccurs="0"/>
<xsd:element ref="OriginPostalCode" minOccurs="0"/>
<xsd:element ref="OriginCountryCode" minOccurs="0"/>
<xsd:element name="ShipmentType" type="CodeType" minOccurs="0"/>
</xsd:sequence>
</xsd:choice>
<xsd:element name="TrackingOption" type="xsd:string" minOccurs="0"/>
<xsd:element name="UPSWorldWideExpressFreightShipment" type="xsd:string" minOccurs="0"/>
<xsd:element ref="IncludeFreight" minOccurs="0"/>
<xsd:element ref="ShipperAccountInfo" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="BeginDate" type="xsd:string"/>
<xsd:element name="CandidateBookmark" type="xsd:string"/>
<xsd:element name="Code" type="xsd:string"/>
<xsd:complexType name="CodeType">
<xsd:sequence>
<xsd:element ref="Code"/>
<xsd:element ref="Description" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="CountryCode" type="xsd:string"/>
<xsd:element name="Description" type="xsd:string"/>
<xsd:element name="DestinationCountryCode" type="xsd:string"/>
<xsd:element name="DestinationPostalCode" type="xsd:string"/>
<xsd:element name="EndDate" type="xsd:string"/>
<xsd:element name="EventFilter" type="xsd:string"/>
<xsd:element name="IncludeFreight" type="xsd:string"/>
<xsd:element name="OriginCountryCode" type="xsd:string"/>
<xsd:element name="OriginPostalCode" type="xsd:string"/>
<xsd:element name="PickupDateRange">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="BeginDate"/>
<xsd:element ref="EndDate"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="PostalCode" type="xsd:string"/>
<xsd:element name="ReferenceNumber">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Value"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Request">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="TransactionReference"/>
<xsd:element ref="RequestAction"/>
<xsd:element ref="RequestOption" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="RequestAction" type="xsd:string"/>
<xsd:element name="RequestOption" type="xsd:string"/>
<xsd:element name="ShipperAccountInfo">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="PostalCode" minOccurs="0"/>
<xsd:element ref="CountryCode"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ShipperNumber" type="xsd:string"/>
<xsd:element name="ShipmentIdentificationNumber" type="xsd:string"/>
<xsd:element name="TrackingNumber" type="xsd:string"/>
<xsd:element name="Value" type="xsd:string"/>
<xsd:element name="TransactionReference">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="CustomerContext" type="xsd:string" minOccurs="0"/>
<xsd:element name="TransactionIdentifier" type="xsd:string" minOccurs="0"/>
<xsd:element name="ToolVersion" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

JAXB

ok, ya tienes el código para hacer una petición.
ese código metelo en un thread que reciba el Tracking id
ve a la base, trae todos los Tracking, y lanza un thread por cada uno, haz pruebas, creando 5 y después 10 threads
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

JAXB

Publicado por Rocio (22 intervenciones) el 04/06/2015 19:49:49
ok !!
Muchas Gracias intentare hacerlo
si ya tengo los Tracking solo los lanzare asi como lo mencionaste

auque si ando un poco perdida ,soy nueva en esto

Gracias !!

:)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar