Class Shipment.VisitRequest (1.20.0)

public static final class Shipment.VisitRequest extends GeneratedMessageV3 implements Shipment.VisitRequestOrBuilder

Request for a visit which can be done by a vehicle: it has a geo-location (or two, see below), opening and closing times represented by time windows, and a service duration time (time spent by the vehicle once it has arrived to pickup or drop off goods).

Protobuf type google.cloud.optimization.v1.Shipment.VisitRequest

Static Fields

ARRIVAL_LOCATION_FIELD_NUMBER

public static final int ARRIVAL_LOCATION_FIELD_NUMBER
Field Value
TypeDescription
int

ARRIVAL_WAYPOINT_FIELD_NUMBER

public static final int ARRIVAL_WAYPOINT_FIELD_NUMBER
Field Value
TypeDescription
int

COST_FIELD_NUMBER

public static final int COST_FIELD_NUMBER
Field Value
TypeDescription
int

DEMANDS_FIELD_NUMBER

public static final int DEMANDS_FIELD_NUMBER
Field Value
TypeDescription
int

DEPARTURE_LOCATION_FIELD_NUMBER

public static final int DEPARTURE_LOCATION_FIELD_NUMBER
Field Value
TypeDescription
int

DEPARTURE_WAYPOINT_FIELD_NUMBER

public static final int DEPARTURE_WAYPOINT_FIELD_NUMBER
Field Value
TypeDescription
int

DURATION_FIELD_NUMBER

public static final int DURATION_FIELD_NUMBER
Field Value
TypeDescription
int

LABEL_FIELD_NUMBER

public static final int LABEL_FIELD_NUMBER
Field Value
TypeDescription
int

LOAD_DEMANDS_FIELD_NUMBER

public static final int LOAD_DEMANDS_FIELD_NUMBER
Field Value
TypeDescription
int

TAGS_FIELD_NUMBER

public static final int TAGS_FIELD_NUMBER
Field Value
TypeDescription
int

TIME_WINDOWS_FIELD_NUMBER

public static final int TIME_WINDOWS_FIELD_NUMBER
Field Value
TypeDescription
int

VISIT_TYPES_FIELD_NUMBER

public static final int VISIT_TYPES_FIELD_NUMBER
Field Value
TypeDescription
int

Static Methods

getDefaultInstance()

public static Shipment.VisitRequest getDefaultInstance()
Returns
TypeDescription
Shipment.VisitRequest

getDescriptor()

public static final Descriptors.Descriptor getDescriptor()
Returns
TypeDescription
Descriptor

newBuilder()

public static Shipment.VisitRequest.Builder newBuilder()
Returns
TypeDescription
Shipment.VisitRequest.Builder

newBuilder(Shipment.VisitRequest prototype)

public static Shipment.VisitRequest.Builder newBuilder(Shipment.VisitRequest prototype)
Parameter
NameDescription
prototypeShipment.VisitRequest
Returns
TypeDescription
Shipment.VisitRequest.Builder

parseDelimitedFrom(InputStream input)

public static Shipment.VisitRequest parseDelimitedFrom(InputStream input)
Parameter
NameDescription
inputInputStream
Returns
TypeDescription
Shipment.VisitRequest
Exceptions
TypeDescription
IOException

parseDelimitedFrom(InputStream input, ExtensionRegistryLite extensionRegistry)

public static Shipment.VisitRequest parseDelimitedFrom(InputStream input, ExtensionRegistryLite extensionRegistry)
Parameters
NameDescription
inputInputStream
extensionRegistryExtensionRegistryLite
Returns
TypeDescription
Shipment.VisitRequest
Exceptions
TypeDescription
IOException

parseFrom(byte[] data)

public static Shipment.VisitRequest parseFrom(byte[] data)
Parameter
NameDescription
databyte[]
Returns
TypeDescription
Shipment.VisitRequest
Exceptions
TypeDescription
InvalidProtocolBufferException

parseFrom(byte[] data, ExtensionRegistryLite extensionRegistry)

public static Shipment.VisitRequest parseFrom(byte[] data, ExtensionRegistryLite extensionRegistry)
Parameters
NameDescription
databyte[]
extensionRegistryExtensionRegistryLite
Returns
TypeDescription
Shipment.VisitRequest
Exceptions
TypeDescription
InvalidProtocolBufferException

parseFrom(ByteString data)

public static Shipment.VisitRequest parseFrom(ByteString data)
Parameter
NameDescription
dataByteString
Returns
TypeDescription
Shipment.VisitRequest
Exceptions
TypeDescription
InvalidProtocolBufferException

parseFrom(ByteString data, ExtensionRegistryLite extensionRegistry)

public static Shipment.VisitRequest parseFrom(ByteString data, ExtensionRegistryLite extensionRegistry)
Parameters
NameDescription
dataByteString
extensionRegistryExtensionRegistryLite
Returns
TypeDescription
Shipment.VisitRequest
Exceptions
TypeDescription
InvalidProtocolBufferException

parseFrom(CodedInputStream input)

public static Shipment.VisitRequest parseFrom(CodedInputStream input)
Parameter
NameDescription
inputCodedInputStream
Returns
TypeDescription
Shipment.VisitRequest
Exceptions
TypeDescription
IOException

parseFrom(CodedInputStream input, ExtensionRegistryLite extensionRegistry)

public static Shipment.VisitRequest parseFrom(CodedInputStream input, ExtensionRegistryLite extensionRegistry)
Parameters
NameDescription
inputCodedInputStream
extensionRegistryExtensionRegistryLite
Returns
TypeDescription
Shipment.VisitRequest
Exceptions
TypeDescription
IOException

parseFrom(InputStream input)

public static Shipment.VisitRequest parseFrom(InputStream input)
Parameter
NameDescription
inputInputStream
Returns
TypeDescription
Shipment.VisitRequest
Exceptions
TypeDescription
IOException

parseFrom(InputStream input, ExtensionRegistryLite extensionRegistry)

public static Shipment.VisitRequest parseFrom(InputStream input, ExtensionRegistryLite extensionRegistry)
Parameters
NameDescription
inputInputStream
extensionRegistryExtensionRegistryLite
Returns
TypeDescription
Shipment.VisitRequest
Exceptions
TypeDescription
IOException

parseFrom(ByteBuffer data)

public static Shipment.VisitRequest parseFrom(ByteBuffer data)
Parameter
NameDescription
dataByteBuffer
Returns
TypeDescription
Shipment.VisitRequest
Exceptions
TypeDescription
InvalidProtocolBufferException

parseFrom(ByteBuffer data, ExtensionRegistryLite extensionRegistry)

public static Shipment.VisitRequest parseFrom(ByteBuffer data, ExtensionRegistryLite extensionRegistry)
Parameters
NameDescription
dataByteBuffer
extensionRegistryExtensionRegistryLite
Returns
TypeDescription
Shipment.VisitRequest
Exceptions
TypeDescription
InvalidProtocolBufferException

parser()

public static Parser<Shipment.VisitRequest> parser()
Returns
TypeDescription
Parser<VisitRequest>

Methods

containsLoadDemands(String key)

public boolean containsLoadDemands(String key)

Load demands of this visit request. This is just like Shipment.load_demands field, except that it only applies to this VisitRequest instead of the whole Shipment. The demands listed here are added to the demands listed in Shipment.load_demands.

map<string, .google.cloud.optimization.v1.Shipment.Load> load_demands = 12;

Parameter
NameDescription
keyString
Returns
TypeDescription
boolean

equals(Object obj)

public boolean equals(Object obj)
Parameter
NameDescription
objObject
Returns
TypeDescription
boolean
Overrides

getArrivalLocation()

public LatLng getArrivalLocation()

The geo-location where the vehicle arrives when performing this VisitRequest. If the shipment model has duration distance matrices, arrival_location must not be specified.

.google.type.LatLng arrival_location = 1;

Returns
TypeDescription
com.google.type.LatLng

The arrivalLocation.

getArrivalLocationOrBuilder()

public LatLngOrBuilder getArrivalLocationOrBuilder()

The geo-location where the vehicle arrives when performing this VisitRequest. If the shipment model has duration distance matrices, arrival_location must not be specified.

.google.type.LatLng arrival_location = 1;

Returns
TypeDescription
com.google.type.LatLngOrBuilder

getArrivalWaypoint()

public Waypoint getArrivalWaypoint()

The waypoint where the vehicle arrives when performing this VisitRequest. If the shipment model has duration distance matrices, arrival_waypoint must not be specified.

.google.cloud.optimization.v1.Waypoint arrival_waypoint = 2;

Returns
TypeDescription
Waypoint

The arrivalWaypoint.

getArrivalWaypointOrBuilder()

public WaypointOrBuilder getArrivalWaypointOrBuilder()

The waypoint where the vehicle arrives when performing this VisitRequest. If the shipment model has duration distance matrices, arrival_waypoint must not be specified.

.google.cloud.optimization.v1.Waypoint arrival_waypoint = 2;

Returns
TypeDescription
WaypointOrBuilder

getCost()

public double getCost()

Cost to service this visit request on a vehicle route. This can be used to pay different costs for each alternative pickup or delivery of a shipment. This cost must be in the same unit as Shipment.penalty_cost and must not be negative.

double cost = 8;

Returns
TypeDescription
double

The cost.

getDefaultInstanceForType()

public Shipment.VisitRequest getDefaultInstanceForType()
Returns
TypeDescription
Shipment.VisitRequest

getDemands(int index)

public CapacityQuantity getDemands(int index)

Deprecated: Use VisitRequest.load_demands instead.

repeated .google.cloud.optimization.v1.CapacityQuantity demands = 9 [deprecated = true];

Parameter
NameDescription
indexint
Returns
TypeDescription
CapacityQuantity

getDemandsCount()

public int getDemandsCount()

Deprecated: Use VisitRequest.load_demands instead.

repeated .google.cloud.optimization.v1.CapacityQuantity demands = 9 [deprecated = true];

Returns
TypeDescription
int

getDemandsList()

public List<CapacityQuantity> getDemandsList()

Deprecated: Use VisitRequest.load_demands instead.

repeated .google.cloud.optimization.v1.CapacityQuantity demands = 9 [deprecated = true];

Returns
TypeDescription
List<CapacityQuantity>

getDemandsOrBuilder(int index)

public CapacityQuantityOrBuilder getDemandsOrBuilder(int index)

Deprecated: Use VisitRequest.load_demands instead.

repeated .google.cloud.optimization.v1.CapacityQuantity demands = 9 [deprecated = true];

Parameter
NameDescription
indexint
Returns
TypeDescription
CapacityQuantityOrBuilder

getDemandsOrBuilderList()

public List<? extends CapacityQuantityOrBuilder> getDemandsOrBuilderList()

Deprecated: Use VisitRequest.load_demands instead.

repeated .google.cloud.optimization.v1.CapacityQuantity demands = 9 [deprecated = true];

Returns
TypeDescription
List<? extends com.google.cloud.optimization.v1.CapacityQuantityOrBuilder>

getDepartureLocation()

public LatLng getDepartureLocation()

The geo-location where the vehicle departs after completing this VisitRequest. Can be omitted if it is the same as arrival_location. If the shipment model has duration distance matrices, departure_location must not be specified.

.google.type.LatLng departure_location = 3;

Returns
TypeDescription
com.google.type.LatLng

The departureLocation.

getDepartureLocationOrBuilder()

public LatLngOrBuilder getDepartureLocationOrBuilder()

The geo-location where the vehicle departs after completing this VisitRequest. Can be omitted if it is the same as arrival_location. If the shipment model has duration distance matrices, departure_location must not be specified.

.google.type.LatLng departure_location = 3;

Returns
TypeDescription
com.google.type.LatLngOrBuilder

getDepartureWaypoint()

public Waypoint getDepartureWaypoint()

The waypoint where the vehicle departs after completing this VisitRequest. Can be omitted if it is the same as arrival_waypoint. If the shipment model has duration distance matrices, departure_waypoint must not be specified.

.google.cloud.optimization.v1.Waypoint departure_waypoint = 4;

Returns
TypeDescription
Waypoint

The departureWaypoint.

getDepartureWaypointOrBuilder()

public WaypointOrBuilder getDepartureWaypointOrBuilder()

The waypoint where the vehicle departs after completing this VisitRequest. Can be omitted if it is the same as arrival_waypoint. If the shipment model has duration distance matrices, departure_waypoint must not be specified.

.google.cloud.optimization.v1.Waypoint departure_waypoint = 4;

Returns
TypeDescription
WaypointOrBuilder

getDuration()

public Duration getDuration()

Duration of the visit, i.e. time spent by the vehicle between arrival and departure (to be added to the possible waiting time; see time_windows).

.google.protobuf.Duration duration = 7;

Returns
TypeDescription
Duration

The duration.

getDurationOrBuilder()

public DurationOrBuilder getDurationOrBuilder()

Duration of the visit, i.e. time spent by the vehicle between arrival and departure (to be added to the possible waiting time; see time_windows).

.google.protobuf.Duration duration = 7;

Returns
TypeDescription
DurationOrBuilder

getLabel()

public String getLabel()

Specifies a label for this VisitRequest. This label is reported in the response as visit_label in the corresponding ShipmentRoute.Visit.

string label = 11;

Returns
TypeDescription
String

The label.

getLabelBytes()

public ByteString getLabelBytes()

Specifies a label for this VisitRequest. This label is reported in the response as visit_label in the corresponding ShipmentRoute.Visit.

string label = 11;

Returns
TypeDescription
ByteString

The bytes for label.

getLoadDemands()

public Map<String,Shipment.Load> getLoadDemands()

Use #getLoadDemandsMap() instead.

Returns
TypeDescription
Map<String,Load>

getLoadDemandsCount()

public int getLoadDemandsCount()

Load demands of this visit request. This is just like Shipment.load_demands field, except that it only applies to this VisitRequest instead of the whole Shipment. The demands listed here are added to the demands listed in Shipment.load_demands.

map<string, .google.cloud.optimization.v1.Shipment.Load> load_demands = 12;

Returns
TypeDescription
int

getLoadDemandsMap()

public Map<String,Shipment.Load> getLoadDemandsMap()

Load demands of this visit request. This is just like Shipment.load_demands field, except that it only applies to this VisitRequest instead of the whole Shipment. The demands listed here are added to the demands listed in Shipment.load_demands.

map<string, .google.cloud.optimization.v1.Shipment.Load> load_demands = 12;

Returns
TypeDescription
Map<String,Load>

getLoadDemandsOrDefault(String key, Shipment.Load defaultValue)

public Shipment.Load getLoadDemandsOrDefault(String key, Shipment.Load defaultValue)

Load demands of this visit request. This is just like Shipment.load_demands field, except that it only applies to this VisitRequest instead of the whole Shipment. The demands listed here are added to the demands listed in Shipment.load_demands.

map<string, .google.cloud.optimization.v1.Shipment.Load> load_demands = 12;

Parameters
NameDescription
keyString
defaultValueShipment.Load
Returns
TypeDescription
Shipment.Load

getLoadDemandsOrThrow(String key)

public Shipment.Load getLoadDemandsOrThrow(String key)

Load demands of this visit request. This is just like Shipment.load_demands field, except that it only applies to this VisitRequest instead of the whole Shipment. The demands listed here are added to the demands listed in Shipment.load_demands.

map<string, .google.cloud.optimization.v1.Shipment.Load> load_demands = 12;

Parameter
NameDescription
keyString
Returns
TypeDescription
Shipment.Load

getParserForType()

public Parser<Shipment.VisitRequest> getParserForType()
Returns
TypeDescription
Parser<VisitRequest>
Overrides

getSerializedSize()

public int getSerializedSize()
Returns
TypeDescription
int
Overrides

getTags(int index)

public String getTags(int index)

Specifies tags attached to the visit request. Empty or duplicate strings are not allowed.

repeated string tags = 5;

Parameter
NameDescription
indexint

The index of the element to return.

Returns
TypeDescription
String

The tags at the given index.

getTagsBytes(int index)

public ByteString getTagsBytes(int index)

Specifies tags attached to the visit request. Empty or duplicate strings are not allowed.

repeated string tags = 5;

Parameter
NameDescription
indexint

The index of the value to return.

Returns
TypeDescription
ByteString

The bytes of the tags at the given index.

getTagsCount()

public int getTagsCount()

Specifies tags attached to the visit request. Empty or duplicate strings are not allowed.

repeated string tags = 5;

Returns
TypeDescription
int

The count of tags.

getTagsList()

public ProtocolStringList getTagsList()

Specifies tags attached to the visit request. Empty or duplicate strings are not allowed.

repeated string tags = 5;

Returns
TypeDescription
ProtocolStringList

A list containing the tags.

getTimeWindows(int index)

public TimeWindow getTimeWindows(int index)

Time windows which constrain the arrival time at a visit. Note that a vehicle may depart outside of the arrival time window, i.e. arrival time + duration do not need to be inside a time window. This can result in waiting time if the vehicle arrives before TimeWindow.start_time.

The absence of TimeWindow means that the vehicle can perform this visit at any time.

Time windows must be disjoint, i.e. no time window must overlap with or be adjacent to another, and they must be in increasing order.

cost_per_hour_after_soft_end_time and soft_end_time can only be set if there is a single time window.

repeated .google.cloud.optimization.v1.TimeWindow time_windows = 6;

Parameter
NameDescription
indexint
Returns
TypeDescription
TimeWindow

getTimeWindowsCount()

public int getTimeWindowsCount()

Time windows which constrain the arrival time at a visit. Note that a vehicle may depart outside of the arrival time window, i.e. arrival time + duration do not need to be inside a time window. This can result in waiting time if the vehicle arrives before TimeWindow.start_time.

The absence of TimeWindow means that the vehicle can perform this visit at any time.

Time windows must be disjoint, i.e. no time window must overlap with or be adjacent to another, and they must be in increasing order.

cost_per_hour_after_soft_end_time and soft_end_time can only be set if there is a single time window.

repeated .google.cloud.optimization.v1.TimeWindow time_windows = 6;

Returns
TypeDescription
int

getTimeWindowsList()

public List<TimeWindow> getTimeWindowsList()

Time windows which constrain the arrival time at a visit. Note that a vehicle may depart outside of the arrival time window, i.e. arrival time + duration do not need to be inside a time window. This can result in waiting time if the vehicle arrives before TimeWindow.start_time.

The absence of TimeWindow means that the vehicle can perform this visit at any time.

Time windows must be disjoint, i.e. no time window must overlap with or be adjacent to another, and they must be in increasing order.

cost_per_hour_after_soft_end_time and soft_end_time can only be set if there is a single time window.

repeated .google.cloud.optimization.v1.TimeWindow time_windows = 6;

Returns
TypeDescription
List<TimeWindow>

getTimeWindowsOrBuilder(int index)

public TimeWindowOrBuilder getTimeWindowsOrBuilder(int index)

Time windows which constrain the arrival time at a visit. Note that a vehicle may depart outside of the arrival time window, i.e. arrival time + duration do not need to be inside a time window. This can result in waiting time if the vehicle arrives before TimeWindow.start_time.

The absence of TimeWindow means that the vehicle can perform this visit at any time.

Time windows must be disjoint, i.e. no time window must overlap with or be adjacent to another, and they must be in increasing order.

cost_per_hour_after_soft_end_time and soft_end_time can only be set if there is a single time window.

repeated .google.cloud.optimization.v1.TimeWindow time_windows = 6;

Parameter
NameDescription
indexint
Returns
TypeDescription
TimeWindowOrBuilder

getTimeWindowsOrBuilderList()

public List<? extends TimeWindowOrBuilder> getTimeWindowsOrBuilderList()

Time windows which constrain the arrival time at a visit. Note that a vehicle may depart outside of the arrival time window, i.e. arrival time + duration do not need to be inside a time window. This can result in waiting time if the vehicle arrives before TimeWindow.start_time.

The absence of TimeWindow means that the vehicle can perform this visit at any time.

Time windows must be disjoint, i.e. no time window must overlap with or be adjacent to another, and they must be in increasing order.

cost_per_hour_after_soft_end_time and soft_end_time can only be set if there is a single time window.

repeated .google.cloud.optimization.v1.TimeWindow time_windows = 6;

Returns
TypeDescription
List<? extends com.google.cloud.optimization.v1.TimeWindowOrBuilder>

getVisitTypes(int index)

public String getVisitTypes(int index)

Specifies the types of the visit. This may be used to allocate additional time required for a vehicle to complete this visit (see Vehicle.extra_visit_duration_for_visit_type).

A type can only appear once.

repeated string visit_types = 10;

Parameter
NameDescription
indexint

The index of the element to return.

Returns
TypeDescription
String

The visitTypes at the given index.

getVisitTypesBytes(int index)

public ByteString getVisitTypesBytes(int index)

Specifies the types of the visit. This may be used to allocate additional time required for a vehicle to complete this visit (see Vehicle.extra_visit_duration_for_visit_type).

A type can only appear once.

repeated string visit_types = 10;

Parameter
NameDescription
indexint

The index of the value to return.

Returns
TypeDescription
ByteString

The bytes of the visitTypes at the given index.

getVisitTypesCount()

public int getVisitTypesCount()

Specifies the types of the visit. This may be used to allocate additional time required for a vehicle to complete this visit (see Vehicle.extra_visit_duration_for_visit_type).

A type can only appear once.

repeated string visit_types = 10;

Returns
TypeDescription
int

The count of visitTypes.

getVisitTypesList()

public ProtocolStringList getVisitTypesList()

Specifies the types of the visit. This may be used to allocate additional time required for a vehicle to complete this visit (see Vehicle.extra_visit_duration_for_visit_type).

A type can only appear once.

repeated string visit_types = 10;

Returns
TypeDescription
ProtocolStringList

A list containing the visitTypes.

hasArrivalLocation()

public boolean hasArrivalLocation()

The geo-location where the vehicle arrives when performing this VisitRequest. If the shipment model has duration distance matrices, arrival_location must not be specified.

.google.type.LatLng arrival_location = 1;

Returns
TypeDescription
boolean

Whether the arrivalLocation field is set.

hasArrivalWaypoint()

public boolean hasArrivalWaypoint()

The waypoint where the vehicle arrives when performing this VisitRequest. If the shipment model has duration distance matrices, arrival_waypoint must not be specified.

.google.cloud.optimization.v1.Waypoint arrival_waypoint = 2;

Returns
TypeDescription
boolean

Whether the arrivalWaypoint field is set.

hasDepartureLocation()

public boolean hasDepartureLocation()

The geo-location where the vehicle departs after completing this VisitRequest. Can be omitted if it is the same as arrival_location. If the shipment model has duration distance matrices, departure_location must not be specified.

.google.type.LatLng departure_location = 3;

Returns
TypeDescription
boolean

Whether the departureLocation field is set.

hasDepartureWaypoint()

public boolean hasDepartureWaypoint()

The waypoint where the vehicle departs after completing this VisitRequest. Can be omitted if it is the same as arrival_waypoint. If the shipment model has duration distance matrices, departure_waypoint must not be specified.

.google.cloud.optimization.v1.Waypoint departure_waypoint = 4;

Returns
TypeDescription
boolean

Whether the departureWaypoint field is set.

hasDuration()

public boolean hasDuration()

Duration of the visit, i.e. time spent by the vehicle between arrival and departure (to be added to the possible waiting time; see time_windows).

.google.protobuf.Duration duration = 7;

Returns
TypeDescription
boolean

Whether the duration field is set.

hashCode()

public int hashCode()
Returns
TypeDescription
int
Overrides

internalGetFieldAccessorTable()

protected GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable()
Returns
TypeDescription
FieldAccessorTable
Overrides

internalGetMapField(int number)

protected MapField internalGetMapField(int number)
Parameter
NameDescription
numberint
Returns
TypeDescription
MapField
Overrides

isInitialized()

public final boolean isInitialized()
Returns
TypeDescription
boolean
Overrides

newBuilderForType()

public Shipment.VisitRequest.Builder newBuilderForType()
Returns
TypeDescription
Shipment.VisitRequest.Builder

newBuilderForType(GeneratedMessageV3.BuilderParent parent)

protected Shipment.VisitRequest.Builder newBuilderForType(GeneratedMessageV3.BuilderParent parent)
Parameter
NameDescription
parentBuilderParent
Returns
TypeDescription
Shipment.VisitRequest.Builder
Overrides

newInstance(GeneratedMessageV3.UnusedPrivateParameter unused)

protected Object newInstance(GeneratedMessageV3.UnusedPrivateParameter unused)
Parameter
NameDescription
unusedUnusedPrivateParameter
Returns
TypeDescription
Object
Overrides

toBuilder()

public Shipment.VisitRequest.Builder toBuilder()
Returns
TypeDescription
Shipment.VisitRequest.Builder

writeTo(CodedOutputStream output)

public void writeTo(CodedOutputStream output)
Parameter
NameDescription
outputCodedOutputStream
Overrides
Exceptions
TypeDescription
IOException